gpt4 book ai didi

C++ 内存地址

转载 作者:IT王子 更新时间:2023-10-28 23:36:38 26 4
gpt4 key购买 nike

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

这是我的代码

#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 is 003EFAA4 value at address is Hello //我很容易理解

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

  3. 输出与 1 相同

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

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

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

最佳答案

Next Address2 is 003EFAA8 (This is where i struggle to understand. My understanding is the next address should be 003EFAA5 considering char is of 1 Byte?

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

Next Address2 is 003EFAB4 (This is where i struggle to understand too. My understanding is the next address should be 003EFAA8 when address of variable name is 003EFAA4 considering size of char pointer is of 4 Byte?

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

关于C++ 内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56791251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com