指针和数组笔试题解析(最详细解析,没有之一)
前言
指针和数组在许多编程场景中经常结合使用,比如通过指针来访问数组的元素、通过指针来遍历数组等。指针和数组的灵活应用可以帮助我们更好地处理和操作数据,提高程序的性能和效率,指针和数组在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个字

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





