求问c语言大神: int a[3][4] 那么a,*a,&a是什么类型?有什么区别?

求问c语言大神:
int a[3][4]
那么a,*a,&a是什么类型?有什么区别?

数组元素地址是连续的
a是表示二维数组的首地址,其值相当于 &a[0][0] 本身是常量指针 不能改变其值。
*a是行的首地址 也就是&a[0] 如果你把(*a)+1 那么值就是 &a[1]
&a值和a一样,但意义不同,
a表示数组首地址,a+1就变成第二个元素地址(int 每个元素地址相隔4)
&a表示整个数组,&a+1就直接跳过整个数组的内存地址空间(相当于跳过了 4*元素个数的地址)
你可以用sizeof(a) 和sizeof(&a) 查看内存大小就知道了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-17
a是指数组的首地址,是个地址值;
*a是数组第一个位置的元素值,是数组中的数值;
&a不能用于取数组的地址,本身a就是地址了,不能再次取地址,否则得到的值是错误的。但是可以取变量的地址。
第2个回答  2018-01-17
二维数组数组名为数组指针.
所以
a类型为 int (*)[4]
*a就是a[0], 类型为int[], 等效于const int *
&a是二维数组指针. 类型为 int (*)[3][4];本回答被提问者和网友采纳
相似回答