C中结构对象的内存位置

时间:2014-07-13 02:20:00

标签: c

这是一段代码

#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

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

有人可以解释一下吗?

感谢

1 个答案:

答案 0 :(得分:1)

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

myobj->b = myobj + 1;