代码阅读题-结构体大小
题目如下,小米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
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/16715448.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步