首页 > 解决方案 > C++ 内存地址

问题描述

如果这是一个重复的问题,请原谅

这是我的代码

#include "stdafx.h"
#include <stdio.h>
#include "iostream"
#include <stdlib.h>
using namespace std;

int main()
{
    char * name = "Hello";

    cout << "2" << endl;
    cout << "Address2 is " << &name <<  "   value at address is " << * (&name) << endl;
    cout << "Next address2 is " << &name + 1 << "   value at address is " << name + 1 << "  " << sizeof(char) << endl;

    cout << "3" << endl;
    cout << "Address3 is " << &name << "   value at address is " << name << endl;

    cout << "Next address3 is " << &name + sizeof name << "   value at address is " << name + sizeof name << endl;
    getchar();
}

这是输出

  1. Address2 是 003EFAA4 地址的值是 Hello // 容易理解

  2. 下一个地址 2 是003EFAA8 (这是我难以理解的地方。我的理解是下一个地址应该是 003EFAA5 考虑到 char 是 1 字节?

  3. 输出与 1 相同

  4. 下一个地址 2 是003EFAB4 (这也是我难以理解的地方。我的理解是当变量名的地址是 003EFAA4 时,下一个地址应该是 003EFAA8 考虑到 char 指针的大小是 4 字节?

我对内存的理解是地址是以字节为单位引用的。如果这是真的,那么为什么在上面的数字 3 中它给我的地址是 4 个字节,而在上面的数字 4 中它给我的下一个地址是 10 个字节?

任何解释将不胜感激。谢谢

标签: c++memory

解决方案


下一个地址 2 是 003EFAA8 (这是我难以理解的地方。我的理解是下一个地址应该是 003EFAA5 考虑到 char 是 1 字节?

当您执行此操作时,&name + 1您将转到类型的下一个地址namename不是char虽然。它是 achar*并且在您的系统char*上 a 的大小为 4。这就是它向前移动 4 个字节的原因,因为这是下一个char*可以定位的位置。

下一个地址 2 是 003EFAB4 (这也是我难以理解的地方。我的理解是当变量名的地址是 003EFAA4 时,下一个地址应该是 003EFAA8 考虑到 char 指针的大小是 4 字节?

这基本上与上面发生的事情相同,但不是去下一个char*,而是去sizeof name下一个元素,在这种情况下是第四个元素。


推荐阅读