c语言指针:int a[3][4],(*p)[4];p=a;为什么*p会等于&a[0][0]? p

c语言指针:int a[3][4],(*p)[4];p=a;为什么*p会等于&a[0][0]?
p=a,也就是p=&a[0],然后*&a[0]不是取值吗?怎么还是地址?

你需要理解 &a a a[0] 和a[0][0]的区别,其中&a是得到整片数组的地址,a是第一行的地址,a[0]是第一行数组的地址,a[0][0]是第一个元素的值。&a=a = a[0]=&a[0][0]。他们的值是一样的,都是地址,但是他们代表的步长不一样。步长体现在你做加法的时候,比如(&a++),地址就偏移了sizeof(int )*3*4的后面,到了这一片数组的后面,a++就是偏移了sizeof(int)*4,偏移到a[1],a[0]++就是偏移了sizeof(int),到了&a[0][1].而你说的*&a[0] = a[0],是个地址。a=&a[0].追问

谢谢。

温馨提示:答案为网友推荐,仅供参考
相似回答