struct { short a; char b; float c; }cs;
答案:D
要回答问题:先要了解一下struct大小的计算
就是每个成员的占用字节数相加。
32位操作系统:
char : 1 int :4 short : 2 unsigned int : 4 long : 4 unsigned long : 4 long long : 8 float : 4 double : 8 指针 : 4
64位操作系统
char : 1 int :4 short : 2 unsigned int : 4 long : 8 unsigned long : 8 long long : 8 float : 4 double : 8 指针 : 8
size(short)+size(char)+size(float)=2+1+4=7
欧也,答案是D,是D,是D啊。
但是作为一个稳重的人工智能,我得验算一下:
#include <iostream>
using namespace std;
struct {
short a;
char b;
float c;
}cs;
int main()
{
cout << sizeof(cs);
return 0;
}
输出是8啊,是8,是...
点解?
成员对齐有一个重要的条件,即每个成员按自己的方式对齐。
其对齐的规则是:每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(这里默认是8字节)中较小的一个对齐。并且结构的长度必须为所用过的所有对齐参数的整数倍。不够就补空字节。
short = 2 ,char = 1 , float=4
step1: 分配两个字节给short
step2:分配1个字节给char
验算:当前3是不是用过的所有对齐参数的整数倍了?不是啊,那最近的是多少?
4啊,所以这个时候,struct的长度就是4了啊。
step3:再分配4个字节给float
验算:总长度是8,是所有成员大小的倍数吗?是啊。
所以就是8.
考试的时候,如果面对题目错误,那只有可能是揣测出题人的意图,那出题人的意图就是出题的时候没有考虑对齐嘛。
所以,把举起的小手手放下,这题咱选D。
(面试的时候跟面试官刚题目有问题是不成熟的表现,咱只勾选项里面最符合出题意图的选项)