我可以使用箭头运算符 (->) 访问我的并集吗?

标签 c pointers unions

我想知道我是否可以在 union 中使用箭头运算符,但我无权访问我的构建环境。

假设我有以下 union

union max30205_raw_data {
    struct {
        uint8_t lsb;
        uint8_t msb;
    };
    struct {
        uint16_t magnitude_bits:15;
        uint16_t sign_bit:1;
    };
    uint16_t uwrd;
    int16_t swrd;
};

我会按照下面的方式填写union的内容,但是我想知道union成员msblsb的访问是否正确?

int32_t max30205_read_reg16_WithDefUnion(char reg, max30205_raw_data *p_unionRawData) {
    char aux[] = {0,0}
    int32_t error;

    if (reg == MAX30205_REG_TEMPERATURE ||  reg == MAX30205_REG_THYST_LOW_TRIP || reg == MAX30205_REG_TOS_HIGH_TRIP) {

        error = twi_max30205_read(&myMax30205Instance,max30205Address,reg,&aux,sizeof(aux));
        if(error == 0){
            p_unionRawData->msb = aux[0];//IS THIS RIGHT IN C?
            p_unionRawData->lsb = aux[1];//IS THIS RIGHT IN C?
        }
    }   
    return error;
}

我将调用max30205_read_reg16_WithDefUnion()作为

int16_t max30205MeasureTemperatureWithDefUnion(void) {    
    char regT = MAX30205_REG_TEMPERATURE;

    max30205_raw_data rawTemp;
    rawTemp.msb = 0;
    rawTemp.lsb = 0;
    rawTemp.swrd = 0;

    int16_t temperatureValue = 0;

    if (max30205_read_reg16_WithDefUnion(regT,&rawTemp) ==0)
        temperatureValue = rawTemp.swrd;

    return temperatureValue;
}

最佳答案

是的。 -> 适用于结构体指针和 union 体指针。

关于我可以使用箭头运算符 (->) 访问我的并集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57451616/

相关文章:

连接两个字符串错误

C - printf 里面的 "if"语句不显示

c - 如何在一个进程中进行 TLS 握手并在另一个进程中处理其余连接?

c - 如何计算双指针中存储的字数

c - 显示128位长数据

c - union 成员初始化问题

有人可以解释为什么我会收到此类型错误吗?

C++ mpz_class 和二进制文件

c++ - 与指针 vector 一起使用的最佳智能指针是什么

c++ - 如何用 0 memset 匿名 union