题目如下,小米23秋招-9.20-笔试
首先这是一道C++的题,注意到的第一点是这个二维数组的初始化方式,他是给了一种一维数组的赋值方式,虽然没见过,但是想当然应该是逐层填充
经测试确实似乎这样的,而且给的初始值过多会报错,给少了打印默认值0
int nums[3][5] = { 1,2,3,4,5,6,7,8,9,10,11,12,13};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
cout << nums[i][j];
}
cout << endl;
}
另外一点后来才注意到的是,我一直记得char
是两个字节,但是其实C++中char
只有1个字节
Java 采用UTF-16字符集
C++ 逛了一圈也不是很清楚,应该是ASCII
结构体大小的计算
首先,C++中空类/空结构体大小为1,并且当类/结构体不空的时候,这个1就不存在了
是为了使其有不同的内存地址,详见
C++指针32位系统中大小为4,63位大小为8
然后是结构体大小的计算,直接算是:三个char
=3字节,加上4字节大小的int
,所以应该是7字节
但事实上是12字节!!
怎么计算的呢?
字节对齐原则
结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节
结构体中最大的int
占四字节,所以每次申请都是4
- 申请一个4,两个
char
占了2 - 剩下2字节不够
int
,占位填充 - 再申请一个4,正好够
int
- 再申请一个4,放最后一个
char
,剩下的3占位填充
一共12