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 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名