【问题标题】:expression must be a modifiable lvalue on a struct array that is modifiable表达式必须是可修改的结构数组上的可修改左值
【发布时间】:2017-03-11 18:18:25
【问题描述】:

我有一个程序应该刺激某种语言的编译器,使用结构我使内存的每个“单词”都有一个 15 int 数组的“位”,问题是每次我尝试编译这个测试我得到 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 };

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

【问题讨论】:

    标签: c arrays struct


    【解决方案1】:

    数组在 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++ 中,您可以使用不受约束的临时值。)

    【讨论】:

    • 谢谢!这行得通。我也很抱歉问了这么愚蠢的问题,我对 c 很陌生
    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2021-09-17
    • 2014-12-15
    • 2014-12-20
    • 2015-09-19
    • 2016-05-09
    相关资源
    最近更新 更多