【指针和数组笔试题(1)】详解指针、数组笔试题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 整型数组
  • 字符数组
    • 第一组题
    • 第二组题
    • 第三组题
  • 总结


前言

在计算之前要了解基本概念:

数组名的理解
数组名是数组首元素的地址
有两个例外
1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组中的大小,单位是字节。
2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址


整型数组

#include<stdio.h>int main()
{int a[] = { 1,2,3,4 };printf("%d\n", sizeof(a));

a是数组名,数组名单独放在sizeof内部,计算的是整个数组的大小,4*4=16,size(a)大小是16个字节

printf("%d\n", sizeof(a + 0));

数组名a是数组首元素地址,a+0还是数组首元素地址,是地址就是4/8个字节

printf("%d\n", sizeof(*a));

*a=a[0],数组名a是数组首元素地址,*a就是首元素,求的是大小不是地址,整型的大小是4个字节

printf("%d\n", sizeof(a + 1));

数组名a是数组首元素地址,a+1是数组第二个元素地址,是地址就是4/8个字节

printf("%d\n", sizeof(a[1]));

a[1] = (a + 1),a是数组首元素地址,a+1是数组第二个元素地址,(a+1)就是第二个元素,就是求大小,整型数组大小就是4个字节。

printf("%d\n", sizeof(&a));

&a取出的是整个数组的地址,是地址就是4/8个字节

printf("%d\n", sizeof(*&a));

sizeof(*&a)=sizeof(a),这里的a表示整个数组,计算的是整个数组中的大小,单位是字节。4 * 4=16

printf("%d\n", sizeof(&a + 1));

&a表示整个数组的地址,&a+1表示跳过整个元素,依然是地址,是地址就是4/8个字节

printf("%d\n", sizeof(&a[0]));

&a[0]是数组首元素地址,4/8个字节

printf("%d\n", sizeof(&a[0] + 1));

&a[0]是数组首元素地址,&a[0] + 1就是数组第二个元素的地址,4/8个字节

	return 0;}

在x64的环境下就是8个字节,在x86环境下就是4个字节
通常使用的是x86环境
在这里插入图片描述

在这里插入图片描述

字符数组

第一组题

int main()
{char arr[] = { 'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));

arr单独放在sizeof内部,计算的是整个数组的大小,char类型的数组,单位是一个字节,1*6=6

printf("%d\n", sizeof(arr+0));

arr表示数组首元素地址,arr+0依旧是首元素的地址,是地址,就是4/8个字节

printf("%d\n", sizeof(*arr));

arr表示数组首元素地址,*arr表示首元素,注意计算的不是地址,是大小,首元素的大小是1个字节

printf("%d\n", sizeof(arr[1]));

arr[1]=*(arr+1),arr[1]表示第二个元素,注意计算的不是地址,是大小,第二个元素得大小是1个字节

printf("%d\n", sizeof(&arr));

&arr是整个数组的地址,是地址就是4/8个字节

printf("%d\n", sizeof(&arr+1));

&arr是整个数组的地址,&arr+1表示跳过整个数组,依旧表示地址,是地址就是4/8个字节

printf("%d\n", sizeof(&arr[0]+1));

&arr[0]是首元素的地址,&arr[0]+1是第二个元素的地址,是地址就是4/8个字节

	return 0;
}

在这里插入图片描述


第二组题

strlen是库函数
作用是求字符串长度,统计的是在字符串中\0之前的字符的个数
如果没有\0就会一直往后找

int main()
{char arr[] = { 'a','b','c','d','e','f' };
printf("%d\n", strlen(arr));

因为字符数组arr中没有\0,所以在求字符串长度的时候,会一直往后统计字符串长度,产生的结果是随机值
printf(“%d\n”, strlen(arr + 0));
//arr是首元素地址,arr+0还是首元素地址, 和第一个一样,还是随机值

printf("%d\n", strlen(*arr));
//错误代码

arr是数组首元素地址,*arr是数组首元素,就是’a’,'a’的ASCII码值是97,
strlen函数参数需要传地址,那就是将97作为地址传给strlen,strlen就从97这个地址往后统计字符串长度,这就非法访问内存了

//错误代码
printf("%d\n", strlen(arr[1]));

arr[1]是数组第二个元素,‘b’,访问的是’b’的ASCII码值是98,所以也是错误代码

printf("%d\n", strlen(&arr));

&arr是数组的地址,数组的地址和首元素的地址一样,所以传递给strlen函数后,依然是从数组的第一个元素向后统计字符串长度,随机值

printf("%d\n", strlen(&arr + 1));

&arr是首元素地址,&arr+1跳过整个数组,从数组最末端向后统计字符串长度,结果也是随机值

printf("%d\n", strlen(&arr[0] + 1));

&arr[0] + 1是第二个元素地址,strlen从第二个元素地址向后统计字符串长度,结果也是随机值

	return 0;
}

在这里插入图片描述


第三组题

int main()
{char arr[] = "abcdef";//里面实际放有[a b c d e f \0]
printf("%d\n", sizeof(arr));

arr单独放在sizeof里面,计算的是整个数组的大小,单位是字节,
char类型的数组,单位是一个字节,1*7=7,结果是7个字节

printf("%d\n", sizeof(arr+0));

arr表示首元素地址,arr+0还是表示首元素地址,是地址,就是4/8个字节

printf("%d\n", sizeof(*arr));//*arr=*(arr+0)=arr[0]

arr表示首元素的地址,*arr表示首元素,数组类型是char类型,单位是一个字节,所以首元素的大小是一个字节

printf("%d\n", sizeof(arr[1]));

arrp[1]表示第二个元素,大小是一个字节

printf("%d\n", sizeof(&arr));

&arr表示整个数组地址,地址是4、8个字节

printf("%d\n", sizeof(&arr+1));

&arr表示整个数组地址,&arr+1表示跳过整个数组,依然是地址,是地址就是4/8个字节

printf("%d\n", sizeof(&arr[0]+1));

&arr[0]表示首元素地址,&arr[0]+1表示第二个元素地址,是地址就是4/8个字节

		return 0;
}

在这里插入图片描述

总结

以上就是第一部分的指针和数组笔试题和详细解释。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络基础 — 数据链路层

目录 数据链路层 认识以太网 局域网转发的原理 认识以太网的MAC报头 以太网帧格式 认识MAC地址 对比理解MAC地址和IP地址 基于MAC帧协议再次谈一谈局域网转发的原理 认识MTU MTU对IP协议的影响 MTU对UDP协议的影响 MTU对于TCP协议的影响 ARP协议 ARP协议的作用 …

Xcode 15 beta 4 (15A5195m) - Apple 平台 IDE

Xcode 15 beta 4 (15A5195m) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接&#xff1a;https://sysin.org/blog/apple-xcode-15/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org visonOS …

SpringBoot整合SpringCloudStream3.1+版本的Kafka死信队列

SpringBoot整合SpringCloudStream3.1版本的Kafka死信队列 上一篇直通车 SpringBoot整合SpringCloudStream3.1版本Kafka 实现死信队列步骤 添加死信队列配置文件&#xff0c;添加对应channel通道绑定配置对应的channel位置添加重试配置 结果 配置文件 Kafka基本配置&#…

C++ deque/queue/stack的底层原理

deque容器的存储结构 和 vector 容器采用连续的线性空间不同&#xff0c;deque 容器存储数据的空间是由一段一段等长的连续空间构成&#xff0c;各段空间之间并不一定是连续的&#xff0c;可以位于在内存的不同区域。 deque采用一块所谓的map数组&#xff08;注意&#xff0c…

rabbitmq模块启动报java.net.SocketException: socket closed的解决方法

问题 最近在接手一个项目时&#xff0c;使用的是spring-cloud微服务构架&#xff0c;mq消息消费模块是单独一个模块&#xff0c;但启动这个模块一直报如下错误&#xff1a; java.net.SocketException: socket closed 这个错误是这个模块注册不到nacos报的错&#xff0c;刚开…

day34-Animated Countdown(动画倒计时)

50 天学习 50 个项目 - HTMLCSS and JavaScript day34-Animated Countdown&#xff08;动画倒计时&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport&q…

态势标绘专题介绍

介绍 这个专栏是专门针对基于Cesium来实现态势标绘的专题专栏,专栏主要实现了30余种态势几何形状的标绘和编辑、文本的标绘和编辑、图片的标绘和编辑以及简单模型的标绘,同时支持标绘结果的导出以及导入。包括最终编写成的一个完整的Vue3.2+TS+Cesium1.107.2的标绘组件。专栏…

从用户的角度谈GPT时代技术突破的两大关键逻辑

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

EtherCAT转TCP/IP网关EtherCAT解决方案

你是否曾经为生产管理系统的数据互联互通问题烦恼过&#xff1f;曾经因为协议不同导致通讯问题而感到困惑&#xff1f;现在&#xff0c;我们迎来了突破性的进展&#xff01; 介绍捷米特JM-TCPIP-ECT&#xff0c;一款自主研发的Ethercat从站功能的通讯网关。它能够连接到Etherc…

通过FPGA实现基于RS232串口的指令发送并控制显示器中目标位置

目录 1.算法理论概述 串口通信模块 指令解析模块 位置控制模块 显示器驱动模块 2.部分核心程序 3.算法运行软件版本 4.算法运行效果图预览 5.算法完整程序工程 1.算法理论概述 通过FPGA实现基于RS232串口的指令发送并控制显示器中目标位置是一种常见的应用场景&#x…

Prompt 技巧指南-让 ChatGPT 回答更准确

随着 ChatGPT 等大型语言模型 (LLM)的兴起&#xff0c;人们慢慢发现&#xff0c;怎么样向 LLM 提问、以什么技巧提问&#xff0c;是获得更加准确的回答的关键&#xff0c;也由此产生了提示工程这个全新的领域。 提示工程(prompt engineering)是一门相对较新的领域&#xff0c;用…

java学习003

Java数组 Java 语言中提供的数组是用来存储固定大小的同类型元素&#xff0c;这一点和PHP语言的可变数组长度不同。 声明变量数组 首先必须声明数组变量&#xff0c;才能在程序中使用数组。下面是声明数组变量的语法&#xff1a; dataType[] arrayRefVar; // 首选的方法 或 …

云计算——云计算与虚拟化的关系

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.虚拟化 1.什么是虚拟化 2.虚拟化技术作用 二.云计算与虚拟化的关系 三.虚…

华为eNSP:ospf的配置

一、拓扑图 二、路由器的配置 1、路由器依据规划配置接口IP AR1: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 10.10.10.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-Gi…

RabbitMQ消息可靠性问题及解决

说明&#xff1a;在RabbitMQ消息传递过程中&#xff0c;有以下问题&#xff1a; 消息没发到交换机 消息没发到队列 MQ宕机&#xff0c;消息在队列中丢失 消息者接收到消息后&#xff0c;未能正常消费&#xff08;程序报错&#xff09;&#xff0c;此时消息已在队列中移除 …

STM32(HAL库)驱动AD8232心率传感器

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 ADC外设配置 2.3 串口外设配置 2.4 GPIO配置 2.5 项目生成 3、KEIL端程序整合 3.1 串口重映射 3.2 ADC数据采集 3.3 主函数代码整合 4 硬件连接 5 效果展示 1、简介 本文通过STM32…

Linux文件处理命令

目录&#xff1a; linux系统与shell环境准备linux常用命令之文件处理Linux系统登录与文件操作 1.linux系统与shell环境准备 Linux 系统简介&#xff1a; Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而…

分布式光伏并网防孤岛保护装置AM5SE-IS

分布式光伏并网防孤岛保护装置AM5SE-IS 应用场景 防孤岛原理&#xff1a;防孤岛保护装置检测到并网点有逆功率、频率突变、 等异常数据时&#xff0c;即发生孤岛现象时&#xff0c;装置可配合断路器快速切除并网点&#xff0c;使本站与电网侧快速脱离&#xff0c;保证整个电站…

blender 纹理材质

添加材质纹理需要哪五个节点&#xff1f; 映射节点&#xff1a;调整纹理的位置、大小、缩放&#xff1b; 纹理坐标&#xff1a;怎么映射&#xff0c;以什么方式去映射这张图&#xff0c;换句话说就是如何将 2D 的图片映射到 3D 的图像上&#xff1b;纹理坐标就是以什么坐标方式…

Flutter系列(3):如何将Flutter项目打包成Android安装包

将Flutter项目打包成Android安装包&#xff0c;主要步骤如下&#xff1a; 一、生成key 进入jdk的bin目录下&#xff1a; keytool -genkey -v -keystore D:\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key 大概会有密码等参数&#xff0c;根据自身需要&#x…