gpt4 book ai didi

C 结构,指向结构的 union 指针

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:19 27 4
gpt4 key购买 nike

我有一个 typedeffed 结构和一个 union 。 union 包含结构和单个 uint32_t。目标是为 foo 分配一个值,该值对应于结构中的“位”。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef struct {
uint32_t valA :1;
uint32_t valB :1;
uint32_t valC :1;
uint32_t valD :1;
uint32_t valE :1;
} ValStruct_Type;

typedef union {
ValStruct_Type valStruct;
uint32_t valUint;
} ValUnion_Type;

uint32_t foo = 0;


int main(void)
{
ValStruct_Type Vals;
Vals.valA = 0x0;
Vals.valB = 0x1;
Vals.valC = 0x0;
Vals.valD = 0x1;
Vals.valE = 0x1;

ValStruct_Type *Vals_ptr;
Vals_ptr = &Vals;

foo = ((ValUnion_Type *)Vals_ptr)->valUint;

return 0;
}

foo 变成:

Decimal:    4194330
Hex: 0x40001a
Binary: 10000000000000000011010

谁能准确解释这里发生的事情(指向结构指针的 union 指针,引用到 union 成员?)?

其次:为什么除了位 1,3 和 4 之外还设置了 foo 的位 22?

最佳答案

由于未定义的行为,第 22 位被设置。您创建了一个从未完全初始化的局部变量,然后设置了它的 5 位。其余的位是它们碰巧是什么,这是未初始化的局部变量的情况。

关于您问题的第一部分……有什么不清楚的吗?你的问题(union pointer to a struct pointer, defererenced to a union member)似乎自己回答了。将某些东西转换为它已经存在的类型没有任何效果。

关于C 结构,指向结构的 union 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18124251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com