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