问题:指针算数 地址加减


#include 
using namespace std;
int main(){
    int a[]={2,5,6,8,10};
    int *p[]={a,a+1,a+2,a+3,a+4};
    cout<<*(p+1)<<' '<<*(p+2)<<' '<<(*(p+2)-*(p+1))<

上面的代码结果是:
0x16fdff414 0x16fdff418 1
Program ended with exit code: 0

第二个地址减去第一个地址不应该结果为 4 吗?(一个int大小)为什么结果为 1 呢?

在C里,对指针进行的加减法并非直接操控地址,比如有这样一个指针:type* ptr,代码中对它计算ptr + n,内部对地址实际上算的是ptr + n * sizeof(type)
减法也同理,代码里计算ptr0 - ptr1,得到的结果实际上是 (ptr0 - ptr1) / sizeof(type)
因此你的事例中似乎得到4,但实际上还计算了一个4 / sizeof(int) 得到1。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^