我有这个代码
struct Student {
char name[48];
float grade;
int marks[10,5];
char gender;
};
Student s;
现在我必须得到 s 的大小
所以我加了
printf("%d",sizeof(s));
现在当我点击编译时,显示的结果是 256
这是错误的,因为它应该是 253
因为大小
字符名称[48]; ----> 48
和
float 等级; -----> 4
和
整数标记[10,5]; ------> 200
和
字符性别; ------>1
所以 48+4+200+1 = 253
那为什么它告诉我 256?
================================
这部分是我看到你的答案后写的
我知道了
假设我有这样的结构: 结构{ 炭[3]; 短整数 b; 长整数 c; 字符d[3]; };
所以..
+-------+-------+-------+
| a |
+-------+-------+-------+
| b |
+-------+-------+-------+-------+
| c |
+-------+-------+-------+-------+
| d |
+-------+-------+-------+
在 packed'' 版本中,请注意,对于您和我来说至少有一点点难以看到 b 和 c 字段是如何环绕的?简而言之,处理器也很难。因此,大多数编译器会像这样
填充结构(就像用额外的、不可见的字段一样):
+-------+-------+-------+-------+
| a | pad1 |
+-------+-------+-------+-------+
| b | pad2 |
+-------+-------+-------+-------+
| c |
+-------+-------+-------+-------+
| d | pad3 |
+-------+-------+-------+-------+
所以如果我的最大尺寸是 200,填充应该是这样的
48 + 152
4 + 196
200 + 0
1 + 199
让他们的身材完美
最佳答案
结构的成员之间或结构的末尾可能有填充字节。
在这种情况下,很可能在结构的末尾有三个字节的填充,在单个 char 成员之后,以确保结构的大小是四的倍数。
关于c++ - 为什么 sizeof 给我这个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2526044/