`a`和`*a`之间有什么区别,其中`a`表示2D数组?

4 c arrays syntax pointers multidimensional-array

指针和数组彼此密切相关,因此,如果我们有一个二维数组

int a[3][4]={
             1,2,3,4,
             5,6,7,8,
             9,10,11,12};
Run Code Online (Sandbox Code Playgroud)

都

printf("%p\n", a);
Run Code Online (Sandbox Code Playgroud)

和

printf("%p\n", *a);
Run Code Online (Sandbox Code Playgroud)

打印相同的地址.我所理解的可能a是指向awhile 的基地址*a指向二维数组的第一个子数组a.

那么,这两者有什么区别?

Que*_*tin 5

我得到的可能是指向一段时间的基地址*a指向二维数组a的第一个子数组.

差不多就是这样.

  • aint(*)[3]当你传递给它时,它自己衰减到它的第一个子数组的指针(类型)printf.
  • *a指定a的第一个子阵列(类型int[3]),并衰减到int*该子阵列的第一个元素的指针(类型).

最后,它们共享相同的值,因为数组具有与其第一个元素相同的地址,递归.

  • 问题是"_他们的差异是什么?_"而不是"_How`a`和`*a`指向同一个位置?_". (2认同)