对于以下代码:
int (*ptr)[10];
int a[10]={99,1,2,3,4,5,6,7,8,9};
ptr=&a;
printf("%d",(*ptr)[1]);
Run Code Online (Sandbox Code Playgroud)
它应该打印什么?我期待这里的垃圾值,但输出是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]);
Run Code Online (Sandbox Code Playgroud)
它给出了分段错误.
Kar*_*k T 12
int *ptr[10];
这是一个由10个int*指针组成的数组,不像你想象的那样,指向一个10 int秒的数组
int (*ptr)[10];
这是一个指向10的数组的指针 int
我相信int *ptr;两者都可以指向一个数组,但给定的形式只能指向一个10 ints 的数组
int (*ptr)[10];
Run Code Online (Sandbox Code Playgroud)
是一个指向10个int数组的指针.
int *ptr[10];
Run Code Online (Sandbox Code Playgroud)
是一个10个指针的数组.
段错的原因:
*PTR = A; 的printf( "%d",*PTR [1]);
在这里,你要分配数组的地址a到ptr其将指向元素a[0].这相当于:*ptr=&a[0];
但是,当您打印时,您访问ptr[1]哪个是未初始化的指针,这是未定义的行为,因此给出段错误.