| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1001 人关注过本帖
标题:int a[10] = {0}; (a + 5) - (a + 2) = ?
取消只看楼主 加入收藏
dragonsun7
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-6-20
结帖率:100%
收藏
 问题点数:0 回复次数:3 
int a[10] = {0}; (a + 5) - (a + 2) = ?
int a[10] = {0};
(a + 5) - (a + 2) = ?

答案是3,而不是12,百撕不得骑姐,求大神解释
2014-06-20 19:47
dragonsun7
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-6-20
收藏
得分:0 
大神些,认真点嘛...
a是整型数组的首地址,我假设是0x20000000。
a+5应该是a[5]的首地址,值为a + 5 * sizeof(int) = 0x20000014
a+2应该是a[2]的首地址,值为a + 2 * sizeof(int) = 0x20000008

所以 (a + 5) - (a + 2) 应该为12才对啊!难道C编译器是先对表达式做优化了


在上例中,我实际编译验证了:
printf("%x\n", (a + 5)) = 0x20000014
printf("%x\n", (a + 2)) = 0x20000008
printf("%x\n", (a + 5) - (a + 2)) = 3

[ 本帖最后由 dragonsun7 于 2014-6-20 21:13 编辑 ]
2014-06-20 20:59
dragonsun7
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-6-20
收藏
得分:0 
回复 6 楼 TonyDeng
就是不懂才问嘛

如果像版主所说的话,(a + 5) - (a + 2)相当于就是计算a[5]和a[2]之间偏移的单元数,这样解释说得过去。

受教了!谢谢!
2014-06-20 21:34
dragonsun7
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-6-20
收藏
得分:0 
受教,感谢版主!
2014-06-25 16:14
快速回复:int a[10] = {0}; (a + 5) - (a + 2) = ?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011793 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved