|
![]() | 作者: lovejiang [lovejiang]
![]() |
登录 |
main() { union 运行结果:9 { unsigned char c; unsigned int i[4]; }z; z.i[0]=0x39; z.i[1]=0x36; printf(“%c\n”,z.c);} [此贴被 lovejiang(lovejiang) 在 01月12日15时46分 编辑过] |
地主 发表时间: 04-01-12 15:46 |
![]() | 回复: 286 [unique] ![]() |
登录 |
帮你做什么? 为什么不直接把要求写在标题上呢? |
B1层 发表时间: 04-01-12 15:48 |
![]() | 回复: lovejiang [lovejiang] ![]() |
登录 |
共用体所占内存空间的大小是所有成员中占用存 储空间最大的一个成员的占用空间的值。 z.i[0]=0x39; z.i[1]=0x36; printf(“%c\n”,z.c);} 怎么根据Z.i[]的值来确定Z.c的值呢 |
B2层 发表时间: 04-01-13 11:46 |
![]() | 回复: 286 [unique] ![]() |
登录 |
这个问题说起来简单,实际处理上是很难的。 1。在VC中int是四个字节,在TC中是两个字节。因此实现起来不一样。 2。数据在内存中的存储也不一样,PC机一般是高位在低位上,低位在高位上。另一些计算机则反之(比如MOTOLOLA)。比如计算机存储0x1234和0x5678时,内存中存的是34,12,78,56。 3。union类型是左对齐的类型。 不过,你的问题由于问题本身简单,所以没有我所说的那么复杂。 首先说z.i。也就是连续4个数的数组,每个占4位。共占16位。z.i[0]中存的值为0x39,(也就是字符9)。 然后是z.c。虽然只是一个char型的值,但与i[4]同级,所以它等于z.i[0]的第一个字节(但不是最高位字节,别问我为什么噢,自己到上面找)。所以z.c等于0x39。 所以最后的结果是9. |
B3层 发表时间: 04-01-13 14:02 |
![]() | 回复: 286 [unique] ![]() |
登录 |
你的程序不好分析,你用下面的程序分析吧。 #include <stdio.h> main() { union { unsigned char c[4]; unsigned int i; }z; z.i=0x31323334; printf("%c%c%c%c\n",z.c[0],z.c[1],z.c[2],z.c[3]); } |
B4层 发表时间: 04-01-13 14:03 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号