想请问一下关于C语言的一道程序运行题目,为什么运行结果是12345678和78?

2025-04-14 00:04:47
推荐回答(4个)
回答1:

首先你要知道编译器给union的分配的内存空间是按占最大空间的变量决定,其他成员都是共享这段内存。
你的union中long b最大,int a和uchar c是共享这块内存;
所以给b赋值,自然a和c也分别有值了。
int占4个字节,所以是0x12345678,而c占一个字节,则是0x78

TIP:0x12 34 56 78是四个字节
而且根据你这个C输出结果来看你的系统应该是小端模式(比如X86),若是在ARM等处理器的环境下你的C输出估计是0x12,这个你以后学习socket编程的时候,肯定要了解的一个知识点(详细可以搜索一下大端模式与小端模式)

回答2:

这个是字节序的问题,在X86(PC)机上,字节序是小序,也就是说,小位数放在前面,大位数放在后面,m的内存布局为:
0x0012FF54 78 56 34 12
所以m.c当读取其中一个字节时,读出来是0x78.

你可以使用VC,看一下m的内存。

回答3:

m是联合体,a(4byte),b(4byte),c(1byte) 所以m占用4byte
a和b是同块内存,所以a会等于b
c是占用的是低字节的1byte

回答4:

因为 unsigned char 数据类型为 8 为二进制数,既 2 位 16 进制数,所以只能截取最后的 0x78 。