c - 这种类型的双关语是否定义明确?
问题描述
我有如下结构。
struct result{
int a;
int b;
int c;
int d;
}
和下面的联合。
union convert{
int arr[4];
struct result res;
}
我输入双关语如下。
int arr1[4] = {1,2,3,5};
union convert *pointer = (union convert *) arr1; // Here is my question, is it well defined?
printf("%d %d\n", pointer->res.a, pointer->res.b);
解决方案
pointer->res.a
很好,但pointer->res.b
未定义的行为。
a
和b
成员之间可以有任意数量的填充。
一些编译器允许您指定成员之间没有填充,但是您当然放弃了可移植性。
推荐阅读
- python - 使用 cx_Oracle executemany() 从 Python 列表/字典批量插入到 Oracle 数据库
- flutter - Flutter:如何使用 HapticFeedback
- ckeditor5 - ckeditor5 创建具有属性的元素“图像”
- google-chrome - 如何在 Chrome 开发工具上显示 iPhone 的状态栏
- python - 使用深色主题引导 css 样式破折号组件
- javascript - 我是在生产构建期间还是在准备生产时删除 webpack-dev-server 和 hot-module 中间件代码?
- modelica - 如何在 Dymola 2019 FD01 中为 Visual Studio 编译器使用编译器标志
- r - 如何使用 dplyr 在数据框中交换 TRUE 和 FALSE
- inno-setup - 安装 Inno Setup 和 AVG 并弹出错误
- flutter - Dart Firestore 添加到数组