expression必须是可修改的struct数组的可修改左值

时间:2017-03-11 18:18:26

标签: c arrays struct

我有一个程序,应该刺激某种语言的编译器,使用结构我使每个“字”的内存有一个15位数组的“位”,问题是,每次我尝试编译这个测试我得到2个错误:

表达式必须是可修改的左值

和 期待一个表达

我不知道为什么会出现第二个, 当我搜索第一个错误时,我发现左边的值是不可修改的,即使我看不清楚原因。

注意:我尝试使用指针而不是数组而且它没有改变任何东西

代码:

word memory[1000];

    struct bit {
            unsigned int bt : 1;
        }typedef bit;

    struct word {
            bit mem[15];
        }typedef word;

        memory[0].mem = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

编辑:请不要建议更改结构,因为它们是大型程序的一部分,更改它们需要花费太多工作

1 个答案:

答案 0 :(得分:0)

数组不能直接在C中赋值。但是,结构包含数组,所以你可以这样做:

word w = { { {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1} } };
memory[0] = w;

使用C99,您可以使用复合文字并说:

memory[0] = (struct word){ { {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1} } };

(在C ++中,您可以使用无约束的临时值。)