NCHU逸尘
2020-01-14 18:25
采纳率: 64.3%
浏览 546

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;
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 编程好难 2020-01-14 20:16

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题