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,百思不得其解?,F在想來,是忽略了輸出的是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 閱讀(409)
評論(0) 編輯 收藏 引用