【发布时间】:2019-11-21 00:52:01
【问题描述】:
我有这样的代码
typedef struct
{
unsigned char arr[15]; //size = 15bytes
unsigned char str_cks; //size = 1byte
}iamstruct; //Total Size = 16bytes
typedef union
{
iamstruct var;
unsigned char union_cks[16];
}iamunion; //Total Size = 16bytes
static iamunion var[2];
int main()
{
printf("The size of struct is %d\n",sizeof(iamstruct)); //Output = 16
printf("The size of union is %d\n",sizeof(iamunion)); //Output = 16
var[1].union_cks[1] = 2;
printf("%d",var[1].union_cks[1] ); // Output =2
return 0;
}
我对联合中的结构变量声明及其工作原理感到困惑?
这样做的主要目的是什么以及它如何提高可访问性?
请分享您的想法。
提前致谢。
我现在从下面的代码中理解了一些东西。这里分配的内存为 16 字节,全部由联合的单个成员共享。
typedef struct
{
unsigned char str_cks1;
unsigned char str_cks2;
unsigned char str_cks3;
unsigned char str_cks4;
unsigned char str_cks5;
unsigned char str_cks6;
unsigned char str_cks7;
}iamstruct;
typedef union
{
iamstruct var;
unsigned char union_cks[7];
}iamunion;
static iamunion var[7];
int main()
{
int i = 0;
printf("The size of struct is %d\n",sizeof(iamstruct));
for(i=0;i<7;i++)
{
var[i].var.str_cks1 = (i*1);
var[i].var.str_cks2 = (i*2);
var[i].var.str_cks3 = (i*3);
var[i].var.str_cks4 = (i*4);
var[i].var.str_cks5 = (i*5);
var[i].var.str_cks6 = (i*6);
var[i].var.str_cks7 = (i*7);
}
for(i=0;i<7;i++)
{
printf("%d\t",var[i].var.str_cks1);
printf("%d\t",var[i].var.str_cks2);
printf("%d\t",var[i].var.str_cks3);
printf("%d\t",var[i].var.str_cks4);
printf("%d\t",var[i].var.str_cks5);
printf("%d\t",var[i].var.str_cks6);
printf("%d\t",var[i].var.str_cks7);
printf("\n");
}
return 0;
}
【问题讨论】:
-
为什么你认为它与任何其他工会不同?
-
联合是一组共享相同起始内存地址的变量,并且是最大的成员。如果其中一个成员是结构,那么它将至少与结构一样大(因此它将能够包含一个)。如果另一个成员(如这里)是一个字节数组,那么您也可以将联合的内容作为字节数组读取或写入。
-
你了解工会的一般用途吗?
-
是的,sir union 允许在同一个内存位置存储不同的数据类型。
-
它只是用于将结构作为字符数组访问