结构体的地址问题,已知首地址

应该选哪一个,有专家详细讲讲吗
假定结构体类型cont_info的声明如下:

struct cont_info {
char id[8];
char name[16];
unsigned post;
char address[100];
char phone[20];
};
若变量 x 的数据类型为 struct const_info,x 的首地址为 0x8049820,则字段 x.phone 的起始地址为

①0x8049993

②0x8049973

③0x80498cd

④0x80498b9

char id[8]; 占8个字节
char name[16]; 占16个字节
unsigned post; 占4个字节
char address[100]; 占100个字节
char phone[20]; 占20个字节
这里面最大的类型是unsigned (int) 类型,结构体中的每个元素的大小都是4的倍数,所以不需要补齐内存。
x.phone 的地址是 0x8049820 + 8+16+4+100 =0x80498a0

你这选项没有答案啊,下面是在vs上运行的结果,两个地址的差距是0x80(也就是128)

img

供参考:

#include <stdio.h>
struct cont_info {
    char id[8];
    char name[16];
    unsigned post;
    char address[100];
    char phone[20];
};
int main()
{
    struct cont_info x;
    printf("%d\n", sizeof(x));
    printf("0x%p", 0x8049820 + (char*)&x.phone - (char*)&x);
    return 0;
}

//148
//0x080498A0

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632