关于C语言共用体的问题谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/28 09:59:38
#include <stdio.h>
struct data
{
int year;
int month;
int day;
};
union dig
{
struct data dat;
char c[6];
};
void main()
{
union dig uni;
int i;
printf("enter year:");
scanf("%d",&uni.dat.year);
printf("enter month:");
scanf("%d",&uni.dat.month);
printf("enter day:");
scanf("%d",&uni.dat.day);
printf("%d %d %d\n",uni.dat.year,uni.dat.month,uni.dat.day);
for(i=0;i<6;i++)
{
printf("%d",uni.c[i]);
}

}
在运行后为什么 输出C数组那里输出的是-7270040 而不是184740230
不好意思 这个是共用体的问题 都是在操作同一段内存

dat已赋值,c没有赋值,但它们存在于同一公用体里,所以c的值是由dat的三个值决定。内存中存储的是二进制,所以应该将dat的三个值转换为二进制,然后每8Bit为c的一个字符的值,所以可能出现负数
你可以将打印那句改成printf("%d\n",uni.c[i]); 以便观察c的每一个值

不明白你在说什么,数组C没有被初始化就输出,结果将是不可预知的!

还可以

C没有被付值