您的位置:首页 > 编程语言 > C语言/C++

&p[4][2]-&a[4][2]到底等于多少?

2017-09-16 21:29 309 查看
void test(){int a[5][5] = {0};int(*p)[4];p = a;printf("%p ,%p\n",&a[4][2],&p[4][2]);printf("%p ,%d\n",&p[4][2]-&a[4][2],&p[4][2]-&a[4][2]);}int main(){test();return 0;}
参考《c语言深度剖析》,对这个程序进行分析:经过测试,结果是这样,a作为二维数组,&a[4][2]相当于 &a[0][0]+4*sizeof(int)+2*sizeof(int)。p是一个指向包含4个int型元素的数组的指针,p+1相当于p向后移动4个int类型的元素的数组,就是4*sizeof(int),所以p[4][2]相当于:&a[0][0]+4*4sizeof(int)+2*sizeof(int)。这个问题是画图来解决的:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 内存 指针 数组