c++ - 为什么 sizeof 给我这个结果?

标签 c++

我有这个代码

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/

相关文章:

c++ - GNU Bison 生成的解析器在给定非空文件时抛出段错误 11

c++ - 创建一个数组,使其包含从 0 到 N 的二进制元素

c++ - 三角形类 C++

c++ - 如何在 C++ 中定义字符串常量?

c++ - 重载后缀增量运算符

c++ - 如何知道帧或图像的大小

c++ - 搜索和排序 vector 的最快方法

c++ - 如何在满足特定条件时限制对象创建

c++ - input_event 结构描述(来自 linux/input.h)

java - 返回在各种语言的函数中创建的数组和对象