Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4519376
  • 博文数量: 356
  • 博客积分: 10458
  • 博客等级: 上将
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-24 14:59
文章分类

全部博文(356)

文章存档

2020年(17)

2019年(9)

2018年(26)

2017年(5)

2016年(11)

2015年(20)

2014年(2)

2013年(17)

2012年(15)

2011年(4)

2010年(7)

2009年(14)

2008年(209)

分类: C/C++

2008-05-25 21:52:07

 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
 
阅读(2722) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~