union结构中,成员是共享内存的。
有朋友问
union
{
int i[2];
long k;
char c[4];
}r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
那么printf("%c\n",s->c[0]);输出什么?
输出是9,百思不得其解。现在想来,是忽略了输出的是char,而0x39作为asc2码,对应的字符就是9.
union的成员内存共享,那么,&(s->i[0]) == &(s->k) == &(s->c[0])
在s->i[0]小于等于8bit的情况下,s->c[0] == s->i[0]
也就是说s->c[0] == 0x39 == 57也就是字符'9'
假如s->[0] > 0x99 那么,s->[0]就是s->i[0]的前8bit的值。
特殊一点的情况,s->i[0]=0x39393939;
那么s->c[0] == s->c[1] == s->c[2] == s->c[3] == 0x39 == 57 == '9'
posted on 2009-06-18 19:17
BirdsHover 阅读(388)
评论(0) 编辑 收藏 引用