我有这样的工会 -
union
{
int a : 1 ;
int b : 1 ;
int c : 1 ;
} Byte1;
我对工会成员写的是TRUE或FALSE。
Byte1.a = x>0;
Byte1.b = y>0;
Byte1.c = z>0;
我需要写入数组元素的联合的全部内容
int array[8];
array[7] = Byte1;
但是这会引发错误 - 在分配类型' int'时会出现不兼容的类型。来自类型' union'
如何在C中为数组元素指定union?
答案 0 :(得分:0)
正如你所说
union的全部内容我需要写入数组元素int array [7] = Byte1;
但是您可以定义具有许多成员的联合,但在任何给定时间只能有一个成员包含值。所以整个包含是不可能存储的。在数组中只存储一个必需值。或者你可以这样做
array[7] = Byte1.a;
答案 1 :(得分:0)
知道您的union
只能保存int值(4字节),您可以使用memcpy
将数据从Byte1
复制到您的数组中,如下所示:
memcpy(array+7, &Byte1, sizeof(Byte1)); // copies the first 4 Bytes of Byte1 to array[7]
并且不要忘记包含string.h
#include <string.h>
答案 2 :(得分:0)
虽然将 int -sized union 复制到 int ,但您可能确实使用memcpy()作为其他人提到的,但目前还不清楚你想要实现的目标。
让我试着用英语描述你的所作所为:
以下代码产生的效果相同,效果更少:
int Byte_that_is_actually_a_word;
...
Byte_that_is_actually_a_word = (z > 0);
...
int array[8];
array[7] = Byte_that_is_actually_a_word;
如果您希望将3个不同的布尔值存储在结果array
的单个元素中,那么您应该这样做:
union {
struct {
unsigned int flag_x:1,
flag_y:1,
flag_z:1;
};
unsigned int all;
} bitmask;
...
bitmask.flag_x = (x > 0);
bitmask.flag_y = (y > 0);
bitmask.flag_z = (z > 0);
...
array[7] = bitmask.all;