2022-09-21 14:33阅读: 39评论: 0推荐: 0

代码阅读题-结构体大小

题目如下,小米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

  1. 申请一个4,两个char占了2
  2. 剩下2字节不够int,占位填充
  3. 再申请一个4,正好够int
  4. 再申请一个4,放最后一个char,剩下的3占位填充
    一共12

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/16715448.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(39)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起