随笔-9  评论-6  文章-5  trackbacks-0
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)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理