首页 > 解决方案 > 我可以使用箭头运算符 (->) 访问我的联合吗?

问题描述

我想知道我是否可以在我的联合中使用箭头运算符并且我无权访问我的构建环境。

假设我有以下工会

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;
};

我会按照以下方式填写工会的内容,但我想知道工会成员的访问是否msb正确lsb

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;
}

标签: cpointersunions

解决方案


是的。->适用于指向结构的指针和指向联合的指针。


推荐阅读