*ptr [10]和(*ptr)[10]之间的差异

Ami*_*pta 12 c pointers

对于以下代码:

    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 的数组


P.P*_*.P. 9

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]);

在这里,你要分配数组的地址aptr其将指向元素a[0].这相当于:*ptr=&a[0];

但是,当您打印时,您访问ptr[1]哪个是未初始化的指针,这是未定义的行为,因此给出段错误.