这是一段代码
#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地址。
有人可以解释一下吗?
感谢
答案 0 :(得分:1)
指针数学!对于指针上的每个增量,地址都会增加指针中数据的大小。这样就可以了:
myobj->b = myobj + 1;