NCHU逸尘 2020-01-14 18:25 采纳率: 50%
浏览 612
已采纳

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。

  • 写回答

2条回答

  • 502203305 2020-01-14 19:02
    关注

    如果要关联可以改为引用

    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;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键