为什么二维数组a[2][2], a和*a输出是相同的地址
#include <stdio.h>int main(void)
{
int a = {{1,2},{1,2}};
printf("%p\n",a);
printf("%p\n",*a);
return 0;
}
如书上说的a如果是一维数组首元素地址的话。*a应该是首元素本身吧,也就是数组{1,2},
不过printf函数好像是不能输出整个数组的,想请问各位printf是怎么处理*a的输出的,从而使得输出的是和a一样的地址。 #include <stdio.h>
int main()
{
int a = {11, 22, 33, 44};
// a 第一个元素的地址
// *a是第一个元素 这里的第一个元素是数组 {11, 22}
// *(*a)是 第一个元素(数组)的第一个元素 (11)
printf("a = %p\n", a);
printf("*a = %p\n", *a);
printf("**a = %d\n", **a);
return 0;
}
我运行了一下a和*a输出是相同的地址。没错数组名就是首元素地址。二维数组是指向一维数组的指针组成指针数组。
所以从类型上讲,a是指向指针的指针,*a就是指向一维数组的指针。*a是第一行数组首地址。所以值相同,但意义不同。
记得采纳哦 懵了
页:
[1]