九千 发表于 2020-4-22 14:34:52

结构体字节对齐

若有下列定义:
sruct date{
                int day;
                int month;
                int year;
};
struct person{
                     char name;
                     struct date birthday;
                     char sex;
};
则变量student在内存中所占的字节为 :
A.15   B.16      C.19   D.20


答案是C    想请教一下为什么是19    ?
char name是12B
struct date birthday是   12B   
加起来,不都已经24B了吗?

KevinHu 发表于 2020-4-22 14:41:11

哪里有student变量?{:9_241:}

sunrise085 发表于 2020-4-22 14:41:27

int也不全是4个字节,与系统有关,也与编译器有关,可能是2字节,也可能是4字节
在这个题目中,显然int是2字节。

自己编程的时候,若严格需要2字节的话,一般不使用int,而是使用short,因为int可能不是2字节,而short绝对是2字节。

jkluoling1992 发表于 2020-4-22 14:42:29

应该是25byte

jkluoling1992 发表于 2020-4-22 14:43:42

sunrise085 发表于 2020-4-22 14:41
int也不全是4个字节,与系统有关,也与编译器有关,可能是2字节,也可能是4字节
在这个题目中,显然int是2 ...

啥系统啊,int俩字节?

永恒的蓝色梦想 发表于 2020-4-22 14:48:53

jkluoling1992 发表于 2020-4-22 14:43
啥系统啊,int俩字节?

有系统int两字节的,不然为什么会有long?

jkluoling1992 发表于 2020-4-22 14:53:48

永恒的蓝色梦想 发表于 2020-4-22 14:48
有系统int两字节的,不然为什么会有long?

16位的系统没用过,工作只用到了32位和64位,这种题目也是绝了

sunrise085 发表于 2020-4-22 15:03:46

永恒的蓝色梦想 发表于 2020-4-22 14:48
有系统int两字节的,不然为什么会有long?

一些微型的16位系统中int是两个字节。不过一般很少见到。
常见的32位或64位系统中int 都是4字节。
两字节int更多是因编译器不同导致的,例如单边机系统中的编译器下int就是2字节。

永恒的蓝色梦想 发表于 2020-4-22 15:15:41

sunrise085 发表于 2020-4-22 15:03
一些微型的16位系统中int是两个字节。不过一般很少见到。
常见的32位或64位系统中int 都是4字节。
两字 ...

九千 发表于 2020-4-22 15:15:51

是的,在这道题里面int 按2字节来计算,12+6+1=19   
已经明白了,谢谢大家的回复

九千 发表于 2020-4-22 15:17:17

jkluoling1992 发表于 2020-4-22 14:53
16位的系统没用过,工作只用到了32位和64位,这种题目也是绝了

是的,很多的考题真的考的很老很不实用,但是就是会考到这个知识点,也是没办法
页: [1]
查看完整版本: 结构体字节对齐