c - 为什么我在 C 编程中得到错误的 Union 大小?
问题描述
我想检查变量arr的大小。我的问题是为什么我得到arr 56 而不是 50 的大小。因为据我所知,union 分配了 union 中声明的最高数据类型的内存。在工会中,学生 char name[50] 的大小最大。
#include <stdio.h>
#include <string.h>
union student
{
int roll;
double marks;
char name[50];
};
int main()
{
union student arr;
printf("%d",sizeof(arr));
return 0;
}
解决方案
这是由于与双精度的对齐。:)sizeof( double )
等于 8。56 可被 8 整除。因此,例如,如果您有一个单元类型的对象数组,则存储的双精度将正确对齐。
推荐阅读
- excel - 如何构建允许多个输入变量(arg1、arg2、arg3、arg4、arg5)的开放式 Excel VBA 函数
- php - 如何实现array_count_values()的相反效果来扩展一个数据数组?
- json - 使用 Rest Framework 查询 Web Api
- c# - 将 SQL Server 与 Dart 一起使用
- office-store - AddIn + MSAL.js 与认证策略
- flutter - 使用 flutter_bloc 库有什么缺点
- node.js - 有人在赛普拉斯有一个使用 OneLogin 的例子吗?
- python - 类 __init__ 混合了固定长度和可变长度 **kwargs 参数
- ios - 访问组件的设置器时应用程序崩溃(iOS 13)
- python - Sagemaker 训练作业未将训练模型上传/保存到 S3 输出路径