下面哪个代码是错误的?()
#include <stdio.h> int main() { int* p = NULL; int arr[10] = { 0 }; return 0; }
A. p = arr;
B. int(*ptr)[10] = &arr;
C. p = &arr[0];
D. p = &arr;
上题答案选D,通过如下代码调试,D选项的用法虽然没有报错,但&arr是数组地址,而p是整型指针, 显然不合适,在面试题中D选项错误。
#include <stdio.h>
int main()
{
int* p = NULL;
int* p1 = NULL;
int* p2 = NULL;
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
p = &arr;//数组地址(实际为数组首元素地址)在面试题中可能为错误选项
p1 = arr;//首元素地址
p2 = &arr[0];//首元素地址
int(*ptr)[10] = &arr;//数组指针*ptr,指向int [10]
printf("p 的地址%p\n", p);
printf("p1 的地址%p\n", p1);
printf("p2 的地址%p\n", p2);
printf("ptr的地址%p\n", ptr);
printf("ptr的大小%d\n", sizeof(ptr));
printf("打印ptr--\n");
for (int i = 0; i < 10; i++)
{
printf("%d ", (*ptr)[i]);//先对ptr解引用,得到int [10],然后打印int [i]
}
return 0;
}
上述代码运行结果如下
定义一个指向含有10个整型的数组的指针,如何通过这个指针访问数组?