C语言 Union和Struct成员赋值问题
#include "pch.h"
#include <iostream>
#include <bitset>
using namespace std;

typedef struct {

    union {
        uint32_t  _32;
        uint16_t _16;
        uint8_t _8[2];
    }gpr[8];

uint32_t eax = gpr[0]._32;
uint32_t ecx = gpr[1]._32;

}CPU_State;

int main()
{
    CPU_State cpu;
    //先测试gpr0和gpr2
    //随便写的数据
    cpu.gpr[0]._32 = 0xabcdf1f0;
    cpu.gpr[1]._32 = 0xabcdf1f1;

    //现在只能输出未初始化的数据
    //我的电脑输出cccccccc和cccccccc
    cout << hex << cpu.eax << endl;
    cout << hex << cpu.ecx << endl;


}

我现在给gpr[0]._32和gpr[1]._32赋值。
现在输出的eax和ecx的值是错的。
我想把eax和ecx的值关联与gpr[0]._32和gpr[1]._32。
限定只能修改结构体的定义。
请问我该如何更改CPU_State这个结构体的定义,使得eax,ecx的值分别等于gpr[0]._32和gpr[1]._32。

CrazyMonk
NCHU陈逸飞 大佬求教。。
7 个月之前 回复

2个回答

如果要关联可以改为引用

typedef struct {

    union {
        uint32_t  _32;
        uint16_t _16;
        uint8_t _8[2];
    }gpr[8];

uint32_t &eax = gpr[0]._32;
uint32_t &ecx = gpr[1]._32;

}CPU_State;

楼上正解
输出cccccccc是因为Debug模式下,会把堆栈上的数据对初始化成了0xcc,因此可以思考出是数据未赋值导致。
但代码进行了
cpu.gpr[0]._32 = 0xabcdf1f0;
cpu.gpr[1]._32 = 0xabcdf1f1;
因此可以思考出是cpu.gpr[0]未与cpu.eax关联导致。再次查看代码发现cpu.eax类型并不为引用或者指针,并没有达到关联的效果。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐