int a[2][2][3];
int(*p)[2][3];
p=a;
printf("%x\n%x\n%d",p[2]-a[0]));
为什么答案是4,谢谢了
====================
首先p[2]是越界的
指针相减的规则:
( (char*)pAddr1 - (char*)pAddr2 ) / sizeof(type)
2*2*3的数组,假设p[2]的地址为0x22ff70h;a[0]的地址应为0x22ff40h
p[2]本身就是一个指针,指向p[n1][n2]这个类型,这个类型也是一个指针,
它这些一个三位数组a[3];
上述语句与下面的语句类似:
printf("%d\n",((char*)p[2] - (char*)a[0]) / sizeof(p[0][0]));
a[0]---->2*3
p[1]---->2*3
p[2]---->
而p[0][0]---->1*3
p[2]-a[0] : [(2*3+2*3)*4 == 48(10进制的)] / [sizeof(p[0][0])== 1*3*4 ] = 4
阅读(2715) | 评论(0) | 转发(0) |