gpt4 book ai didi

c - C中结构对象的内存位置

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:18 26 4
gpt4 key购买 nike

这是一段代码

#include <stdio.h>
#include <stdlib.h>

struct abc
{
int a;
void* b;
};

int main()
{
void* tmp = malloc(100);
struct abc* myobj = tmp;
printf("sizeof myobj:%ld\n", sizeof(struct abc));
printf("myobj:%p\n", myobj);

myobj->b = myobj + sizeof(struct abc);
printf("myobj->b:%p\n", myobj->b);

myobj->b = (void*)myobj + sizeof(struct abc);
printf("myobj->b:%p\n", myobj->b);
}

当我运行这段代码时,我得到以下输出

sizeof myobj:16
myobj:0x1610010
myobj->b:0x1610110
myobj->b:0x1610020

当我向从 0x1610010 开始的 myobj 添加 16 个字节时,我无法理解为什么 myobj 的位置是 0x1610110但是,当我将 myobj 类型转换为 (void*) 并添加 16 个字节时,我得到了 0x1610020 的正确地址。

有人能给我解释一下吗?

谢谢

最佳答案

指针数学!对于指针上的每个增量,地址都会增加指针中数据的大小。这样就可以了:

myobj->b = myobj + 1;

关于c - C中结构对象的内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24718989/

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