首页 > 解决方案 > 为什么指向数组不同元素的两个指针之间的区别是这两个指针之间的元素数?

问题描述

int main()
{
    int arr[]={2,3,5,6,8};
    int *ptr;

    ptr=&arr[3];
    cout<<ptr-arr;
}

问:为什么编译代码后答案是 3,即它应该是 3*sizeof(int),在这种情况下应该是 3*4=12?

标签: c++11

解决方案


原因是编写正确的代码要容易得多。

当数组的连续元素之间的指针差为1时,则可以使用++p遍历数组(假设p是指向某个元素的指针)。例如:

int a[10];

for (auto p = a, e = a + 10; p != e; ++p)
    *p = 42;

请注意代码如何不必处理元素的大小。如果数组类型从int变为double,则代码不必更改并且仍然正确。


推荐阅读