【问题标题】:C - Passing single struct from array to function by reference [duplicate]C - 通过引用将单个结构从数组传递到函数[重复]
【发布时间】:2017-11-16 10:02:56
【问题描述】:

有一段时间没有使用 C 语言了,我一直坚持通过引用将单个结构从结构数组传递给函数。

我的代码如下所示:

struct Sensor {
    //ROM data
    char romCRC[1];
    char romSerial[6];
    char romFamily[1];
};

const int maxSens = 10;

void Read_ROM(struct Sensor *sens){
        char ROM[10];
        for (k = 0; k<8; k++){
             ROM[k] = read_byte();
             sens->romFamily = ROM[0];
        }
}

int main(){
    struct Sensor Sensors[maxSens];
    Read_ROM(&Sensors[0]);
}

我期望它做的是:

  • 创建一个包含 10 个传感器类型结构的数组
  • 将第一个结构的地址传递给函数 Read_ROM
  • 将结构体 Sensor[0] 的成员 romFamily 设置为 ROM[0]

read_byte 已经过测试并且可以正常工作。它确实返回 1 个字符。

当我尝试编译时出现此错误:

#138 expression must be a modifiable lvalue

138 是行号:

sens->romFamily = ROM[0];

这里有什么问题?

【问题讨论】:

    标签: c arrays struct pass-by-reference


    【解决方案1】:

    数组在 C 中是不可赋值的,尽管您可以设置单个元素。

    你需要sens-&gt;romFamily[0] = ROM[0];

    但是首先要质疑为什么你需要一个单元素数组。

    【讨论】:

    • 为什么不直接声明char romFamily;? 1-char 数组有什么意义?
    • @Jean-FrançoisFabre:没有上下文很难说。可能是“设备”在特定工具链的上下文中想要的,但确实值得附加到我已经完成的答案。
    • char romFamily[1]; 与内存中的char romFamily; 相同吧?
    • @Jean-FrançoisFabre:它只是可能导致某些工具链上struct 的对齐差异。也许抑制填充?
    • 你是绝对正确的。我开始使用 romSerial[6] 数组编写结构,并不假思索地将数组表示法适应其他成员。只需使用 char romFamily;解决它。
    猜你喜欢
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2012-10-07
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多