设有以下定义语句:
struct student{
int num;
char name[10];
float score;
}wang,zhang;的变量wang所占的内存字节是( )
A.14 B.16. C.18 D.20
在 C 语言中,struct student 结构体的大小取决于其成员的大小和对齐要求。在这个结构体中,有一个 int 类型的成员(通常占用 4 字节),一个 char 数组成员(占用 10 字节),和一个 float 类型的成员(通常占用 4 字节)。所以,如果没有考虑对齐,这个结构体的大小应该是 4 + 10 + 4 = 18 字节。
struct student
int
char
float
4 + 10 + 4 = 18
然而,许多系统会对结构体的成员进行对齐,以提高内存访问的效率。对于这些系统,struct student 的大小可能会大于 18 字节。具体的大小取决于系统的对齐规则。在许多系统中,struct 的对齐规则是按照其最大成员的大小进行对齐,因此 struct student 的大小可能会被对齐到最接近 18 字节且不小于 18 字节的 4 的倍数,即 20 字节。
struct
所以,正确的答案是选项 D。
结构体变量的总大小,为结构体变量中“最大基本数据类型成员所占字节数”的整数倍(补齐)
由于存储变量地址对齐的问题,计算结构体大小的3条规则: 1、结构体变量的首地址,必须是结构体变量中的“最大基本数据类型成员所占字节数”的整数倍。(一般从0开始)(对齐) 2、结构体变量中的每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节的整数倍。(对齐) 3、结构体变量的总大小,为结构体变量中“最大基本数据类型成员所占字节数”的整数倍(补齐) 最大基本数据类型成员所占字节数:4 首地址:int型四个字节 由于后面是数组char [10],所以直接接在四个字节后面即可,因此占了4+10=14个字节; 又由于上面第二点,float型的首地址偏移量必须是4的倍数,故14个字节再补两个字节,float型从第16个字节开始,长度为四个字节; 此时总长度为20字节,满足上方第三点,因此不需要再补齐了,故总大小为20
哪来的2?
2是哪里来的呀
4+10+(2)+4
arcsinX 回复 arcsinX: or 2+10+4
admin 回复 arcsinX: 已修正
此题不严谨,若是在VC环境中结果为18
admin 回复 非加力: 在GCC中运行为准
D
字节对齐,所以是4 + ...
用户登录可进行刷题及查看答案
字节对齐,所以是4 + 10 + 2 + 4 = 20
登录后提交答案