对于下面的代码:
int (*ptr)[10];
int a[10]={99,1,2,3,4,5,6,7,8,9};
ptr=&a;
printf("%d",(*ptr)[1]);
它应该打印什么?我在这里期待垃圾值,但输出是 1
。
(为此我得出结论,以这种方式初始化指针数组,即 ptr[10]
将开始按顺序指向 a[10]
的元素)。
但是这个代码片段呢:
int *ptr[10];
int a[10]={0,1,2,3,4,5,6,7,8,9};
*ptr=a;
printf("%d",*ptr[1]);
它给出了段错误。
最佳答案
int *ptr[10];
这是一个包含 10 个 int*
指针的数组,而不是像你想象的那样,是一个指向包含 10 个 int
的数组的指针
int (*ptr)[10];
这是一个指向 10 个 int
的数组的指针
我相信它与 int *ptr;
相同,因为两者都可以指向一个数组,但是给定的形式只能指向一个包含 10 个 int
的数组
关于c - *ptr[10] 和 (*ptr)[10] 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13910749/