int *p1,*p2;
p1 = (int*)100;
p2 = (int*)200;
cout<<p2-p1<<endl;
请问这个输出结果是多少啊?不同的编译器有不同的输出,就以vc6为例吧,我测试的是25,不是很明白是为啥?
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)
指针相减,不是简单的算术相减,就这个代码来说,p2 ,p1 两个地址做减法,其结果是这两个地址之间有多少个整型数目。如果你换成char类型的,结果就是100