首页 新闻 会员 周边

【C++】请帮我看个程序,本人比较纠结

0
悬赏园豆:30 [已解决问题] 解决于 2010-09-27 10:20

int *p1,*p2;

p1 = (int*)100;

p2 = (int*)200;

cout<<p2-p1<<endl;

 

请问这个输出结果是多少啊?不同的编译器有不同的输出,就以vc6为例吧,我测试的是25,不是很明白是为啥?

紫竹林的主页 紫竹林 | 初学一级 | 园豆:120
提问于:2010-09-27 09:22
< >
分享
最佳答案
0

25来至于 (200-100)/sizeof(int) => 100/4=25.

反过来思考

int k[100];

 int *p = &k[10];

int *pp = p + 1;

p指向第10个元素,那么p+1一定期望指向第11个元素,而这个的元素是int, 所以pp的值应该是p的值加上sizeof(int)

收获园豆:20
嗷嗷 | 小虾三级 |园豆:757 | 2010-09-27 09:43
不过最后一句话你手误了,“所以pp的值应该是p的值加上sizeof(int)",那就是pp = p + 4 了,应该是pp的值等于p的值加上一个整形单元。
紫竹林 | 园豆:120 (初学一级) | 2010-09-27 10:39
其他回答(1)
0

指针相减,不是简单的算术相减,就这个代码来说,p2 ,p1 两个地址做减法,其结果是这两个地址之间有多少个整型数目。如果你换成char类型的,结果就是100

收获园豆:10
孙伟伟 | 园豆:215 (菜鸟二级) | 2010-09-27 09:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册