首页 > 解决方案 > 这种类型的双关语是否定义明确?

问题描述

我有如下结构。

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);

标签: clanguage-lawyer

解决方案


pointer->res.a很好,但pointer->res.b未定义的行为。

ab成员之间可以有任意数量的填充。

一些编译器允许您指定成员之间没有填充,但是您当然放弃了可移植性。


推荐阅读