指针和数组笔试题解析(最详细解析,没有之一)

本文详细解析了C语言中指针和数组相关的笔试题,涵盖了一维数组、字符数组、字符串以及二维数组的使用,重点讨论了sizeof运算符在不同情况下的行为,包括数组、指针解引用、地址计算等。文章通过多个题型举例,展示了指针和数组在不同场景下的交互,强调了指针在处理数组时的灵活性和潜在的陷阱,如数组越界不影响sizeof的计算结果。

前言

指针和数组在许多编程场景中经常结合使用,比如通过指针来访问数组的元素、通过指针来遍历数组等。指针和数组的灵活应用可以帮助我们更好地处理和操作数据,提高程序的性能和效率,指针和数组在C语言中具有重要的地位和作用,它们是程序设计中不可或缺的重要概念。本文将详细解析指针和数组相关笔试题!!

1. 一维数组和指针相关笔试题

题目及解析:

int main()
{
   
   
	int a[] = {
   
    1,2,3,4 };

	printf("%d\n", sizeof(a));	//数组名单独放在sizeof内部,这里a表示整个数组,计算的是整个数组,为16(4*4)个字节
	printf("%d\n", sizeof(a + 0));//a表示首元素的地址,a+0还是表示首元素地址,是地址就是4/8个字节
	printf("%d\n", sizeof(*a));	//a表示首元素地址,*a表示首元素,大小为4个字节
	printf("%d\n", sizeof(a + 1));//a表示首元素地址,arr+1跳过一个整型长度指向第二个元素(2)的地址,是地址大小就是4/8个字节
	printf("%d\n", sizeof(a[1]));//a[1]取出的是第二个元素2,为int类型,大小为4个字节
	printf("%d\n", sizeof(&a));	//&a取出的是整个数组的地址,但只要是地址,大小都是4/8个字节

	printf("%d\n", sizeof(*&a));	
	//解读一:sizeof(*&a) ---> sizeof(a) ---> 同第一个为16字节
	//解读二:由于我们熟知对整型指针进行解引用得到的是整型;对字符指针进行接引用得到的是一个字符
	//		  这里&a表示数组指针,类型为int (*)[4],对它进行解引用操作得到的是一个数组,即*&a表示整个数组,大小为4*4即16个字节

	printf("%d\n", sizeof(&a + 1));
	//&a取出的是整个数组,&a+1跳过整个数组,指向的是第四个元素4的下一个元素的地址
	//但是地址大小就是4/8个字节

	printf("%d\n", sizeof(&a[0]));//&a[0]取出的是第一个元素1的地址,大小为4/8个字节
	printf("%d\n", sizeof(&a[0] + 1));//&a[0]+1表示取出首元素地址后向后移动一个整型字长,指向第二个元素2的地址,为4/8个字节

	return 0;
}

x64环境下运行结果:
在这里插入图片描述

2. 字符数组和指针相关笔试题

2.1 题型一:

题目及解析:

int main()
{
   
   
	char arr[] = {
   
    'a','b','c','d','e','f' };
	
	printf("%d\n", sizeof(arr));//数组名单独放在sizeof内部,这里的arr表示整个数组,计算的是整个数组的大小,单位是字节,总共6个字
评论 18
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白debug~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值