2

我有一个令人费解的问题(至少对我来说)

假设我声明了一个整数数组:

int arr[3];

从概念上讲,内存中发生的情况是,在编译时,分配了 12 个字节来存储 3 个连续的整数,对吧?(这里有一个插图

根据图示,示例地址

arr[0]1000

arr[1]1004, 并且

arr[2]1008


我的问题是:

arr[0]如果我输出和的地址之间的差异arr[1]

std::cout << &arr[1] - &arr[0] << std::endl;

而不是得到4,

我出乎意料地得到1

谁能解释为什么会导致该输出?

PS:在我的电脑上,一个 int 是 4 个字节。

4

1 回答 1

0

指针算法自动将值除以基类型的大小,所以这一点也不奇怪,因为人们期望得到4 / 4which is 1。投射以unsignd char *查看差异。

#include <iostream>

int
main(void)
{
    int arr[2];

    std::cout << &arr[1] - &arr[0] << std::endl;
    std::cout << reinterpret_cast<unsigned char *>(&arr[1]) -
        reinterpret_cast<unsigned char *>(&arr[0]) << std::endl;

    return 0;
}
于 2016-05-14T14:58:58.760 回答