急 C语言 共用体

来源:百度知道 编辑:UC知道 时间:2024/06/23 11:55:24
#include<stdio.h>
union pw
{
int i;
char c[2];
}*p,a;
void main()
{
p=&a;
p->i=5;
p->c[0]=10;
p->c[1]=1;
printf("%d\n",a.i);
程序的运行结果为何为266 麻烦高手讲解一下 讲详细点
}

你要理解共用体的概念。
共用体的所有成员占用同一块内存空间,写入以覆盖的形式。
所以你最后一次赋值才起主要作用,而最后一次赋值是一个数组形式,且为char型,因此在前两个字节里面存了1,后两个字节里面存了10,这四个字节再以整形输出,明显是256+10=266

你输出a.c[0]结果也是一样的。因为指向相同的内存空间。
建议你改用结构体。

每个共用体只能使用一次,而你使用了两次。在你的程序中或者是使用 int i,或者是使用 char c[2].只能使用其中一个。因为他们是占用同意段内存的,修改成下面的就能输出5了
#include<stdio.h>
union pw
{
int i;
char c[2];
}*p,a;
void main()
{
p=&a;
p->i=5;
printf("%d\n",a.i);
}