【问题标题】:Why do `&n` and `&n + 1` differ by `4` instead of `1`? [duplicate]为什么`&n`和`&n + 1`相差`4`而不是`1`? [复制]
【发布时间】:2021-07-11 21:24:35
【问题描述】:

我希望&n&n + 1 的值是相邻的内存盒,因此它们的地址应该相差1。但是,每次运行这些命令时,我都会得到相差 4 的地址(例如 0056F8000056F804)。为什么会这样?

#include <iostream>
using namespace std;

int main()
{
    int n = 3;
    cout << &n << endl;
    cout << &n + 1;
}

【问题讨论】:

  • 什么是nminimal reproducible example 会很有帮助。
  • 提示:sizeof(*n).
  • @Eljay 我添加了一个示例。
  • 当您说“box”时,实际上是在说“byte”。你相信整数不大于一个字节吗?如果它们更大,那么它们必须分开一个以上的字节以避免重叠。
  • 深思熟虑:如果您将其设为 1,则必须在 int* + int* 不导致 int* 或以指向 int 中间的一些 int* 结尾之间做出选择.这两个真的很尴尬。

标签: c++ memory


【解决方案1】:

指针算法创建一个指向数组的特定 元素 的指针(或等效地,将单个对象视为大小为 1 的数组),因此它通过以下方式有效地更改指针的值元素大小的倍数。

在您的系统上,int 的大小显然是 4 个字节,因此通过将 1 加到 int * 它会创建一个比原始值大 4 的指针值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 2022-09-26
    • 2011-02-16
    • 2015-03-08
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多