int main(){
union key{
int k;
char ch[20];
}u;
strcpy( u.ch, "C Programming");
printf( "u.ch : %s\n", u.ch);
u.k=258;
printf("%d\t%d\t%d\t",u.k,u.ch[0],u.ch[1]);
return 0;
}

输出结果均正确
若将代码改为下面这样又会怎样呢?
int main(){
union key{
int k;
char ch[20];
}u;
u.k=258;
strcpy( u.ch, "C Programming");
printf( "u.ch : %s\n", u.ch);
printf("%d\t%d\t%d\t",u.k,u.ch[0],u.ch[1]);
return 0;
}
字符串输出正确,而k、ch[0]、ch[1]输出错误
这是为什么呢?
共用体是指将不同数据项组织成一个整体,并且共用同一段存储单元。共用体占用存储空间长度等于最长成员的长度。
所以,ch[0]–C--67 ch[1]–Space–32,都是打印的字符串。?
int main(){
union key{
int k;
char ch[20];
}u;
**printf( "Memory size occupied by u : %d\n", sizeof(u));**
strcpy( u.ch, "C Programming");
printf( "u.ch : %s\n", u.ch);
u.k=258;
printf("%d\t%d\t%d\t",u.k,u.ch[0],u.ch[1]);
return 0;
}
char ch[20]是这段代码里占用存储空间最长的长度,20个字节。
使用sizeof函数打印出共用体占用存储空间长度,的确是20个字节。~///(v)\~