面试题答案
一键面试#include <stdio.h>
// 定义联合体来映射寄存器组
union RegisterGroup {
struct {
unsigned char byte0;
unsigned char byte1;
} bytes;
unsigned short int word;
};
int main() {
union RegisterGroup reg;
// 以16位整数方式写入值
reg.word = 0x1234;
// 以字节方式读取值
printf("以字节方式读取: byte0 = 0x%02hhx, byte1 = 0x%02hhx\n", reg.bytes.byte0, reg.bytes.byte1);
// 以字节方式写入值
reg.bytes.byte0 = 0x56;
reg.bytes.byte1 = 0x78;
// 以16位整数方式读取值
printf("以16位整数方式读取: word = 0x%04hx\n", reg.word);
return 0;
}
上述代码中:
- 定义了一个联合体
RegisterGroup
,它包含两个成员:一个结构体bytes
用于按字节访问,其中byte0
和byte1
分别表示两个字节;另一个成员word
用于按16位整数访问。 - 在
main
函数中,首先以16位整数方式写入一个值0x1234
,然后以字节方式读取并打印这两个字节的值。 - 接着以字节方式分别写入
0x56
和0x78
,最后以16位整数方式读取并打印这个16位的值。这样就展示了通过联合体分别以字节和16位整数的方式读写寄存器的值。