这是一段代码
#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/