为什么在结果中*a输出的是a[3][2]的首地址?a是数组的a[3][2]首地址,为什么*a的值不是1?
a已经就是数组的首地址了,*a是对a取内容,为什么*a不是1,而是和a的值一样
追答a是二维数组的首地址,a[0]是第一行的一位数组的首地址, a 和a[0]是不相等的。a中存放的是a[0], a[0]中存放的是{1, 2}
追问a,a[0],&a[0][0]值是一样的
我用VS运行了
*a == a[0];
a == &a[0][0];
#include
main()
{
int a[3][2] = { 1,2,3,4,5,6 }, (*p)[2];
p = a;
printf("%d\n", a[0]);
printf("%d\n", &a[0][0]);
printf("%d\n",a);
printf("%d,%d",*a,*a[0]);
system("pause");
}
二级指针和一级指针是不可能相等的,哪怕值一样,它俩也是不同的变量类型。
这么说吧,二维数组的首地址与二维数组中第一行的首地址在内存中处于相同的位置,但是它们各自代表的含义不同。根本原因就是变量类型不一样
为什么呢?
追答因为是二维数组