Chinaunix首页 | 论坛 | 博客
  • 博客访问: 910178
  • 博文数量: 84
  • 博客积分: 4334
  • 博客等级: 上校
  • 技术积分: 1610
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-27 07:49
文章分类

全部博文(84)

文章存档

2012年(5)

2011年(21)

2010年(58)

分类: C/C++

2010-11-20 20:35:12

在32位的系统中:
int a[5]={1,2,3,4,5};若&a=0xbffff788,聪明的你请告诉我&a+1=?---->0xbffff789?0xbffff78c?好吧,还是不折腾了,看结果吧!
why?
因为a实际占内存空间为20个字节?
有图有真相:
why?它有5个元素啊,1,2,3,4,5,都是整形的,一个整形数据元素占4个字节,所以当然a的内存空间为20字节。所以请注意:&a+1,这里的这个“1”是"1*sizeof(a)",即:
&a+1 = &a+1*sizeof(a);//a是数组名,有这个规定:a=&a=&a[0];
 
OK.这样理解了之后,请聪明的你告诉我: &a+4 = ?
&a+1 = &a+1*sizeof(a);如果你的答案是0xbffff7d8那么恭喜你!
看到这,你是否感觉很熟悉啊?是的,很熟悉很熟悉,但是我一是回答不上来!哈哈,不好意思,给你偷天换日了一把!看看下面的:

int *p_a = NULL;
p = &a;

原来就是指针的运算嘛!指针本身不就是一个地址变量吗?

后记:我们知道了&a+1=&a+1*sizeof(a);

还请区分&a+1和a+1:a+1=a[1],可是这又是为何呢?

其实本质还是一样的!

a:数组名,等效于int *,占4字节

&a:数组指针,占20字节

a+1=a+1*sizeof(a);-----0xbffff788+4=0xbffff78c=a[1];

阅读(2370) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~