c语言结构体的问题

2025-05-20 07:56:37
推荐回答(2个)
回答(1):

由于关键字是union而不是struct,因此这是个联合的问题
这里假设int变量占用两个字节
联合mk的意思是,定义两个字节的存储空间,联合mk包含的两个变量从不同角度来理解这两个字节的含义:变量m将这两个字节看作2个字符元素组成的数组,m[0]是第1个元素,m[1]是第2个元素,或者说m[0]访问第1个字节,m[1]访问第2个字节;变量k将这两个字节合起来看做一个整数
因此:mk.m[0]=0;是将联合定义的第1个字节赋值为0;mk.m[1]=1;是将第2个字节赋值成1
两个字节按顺序的十六进制表示为:00H,01H
整型变量存放是这样的:低位字节先存放,然后是高位字节,假设整型是0x1234,那么存放的顺序是: 34H,12H
从变量k看来,整数是: 0100H,变成十进制(因为printf输出的是十进制结果)为16
程序输出:16

回答(2):

这道题的结果取决于编译器的处理,主要是两点

  1. 对int变量做几字节处理

  2. 使用大端字节序还是小端字节序

假设int做2字节处理,使用小端字节序

结果是1