int a[4][4]] = {2,5,8}; int *p = a; printf("%d,%d",(*p++)-1,*p); 这段代码的输出值是什么?为什么?

 这个问题的关键是理解 &a 
a是一个数組名也就是数组的首地址。
对a进行取地址运算符得到的是一个指向数组的指针!!!!这句话尤为重要!
也就相当于
int (*p) [5] = &a;
p是一个指针,它指向的是一个包含5个int元素的数组!!
那么执行p+1后p的偏移量相当于 p + sizeof(int) * 5 !!
而程序中强制将指针p转换成一个int* 那么 p -1 其实就是 p - sizeof(int)
所以,p -1 指向了数组中嘚最后一个元素也就是 5

这个问题的关键是理解 &a

a是一个数組名也就是数组的首地址。
对a进行取地址运算符得到的是一个指向数组的指针!!!!这句话尤为重要!
p是一个指针,它指向的是一個包含5个int元素的数组!!

所以p -1 指向了数组中得最后一个元素,也就是 5

我要回帖

更多关于 int a[4][4] 的文章

 

随机推荐