C 错误:表达式必须是可修改的左值

Posted

技术标签:

【中文标题】C 错误:表达式必须是可修改的左值【英文标题】:C error: expression must be a modifiable lvalue 【发布时间】:2020-11-07 17:19:30 【问题描述】:

我在 C 中得到这个错误:表达式必须是可修改的左值

    void bfInsertion(BloomFilter* bloomFilter,const char* elem,int elemLen)

    int i = 1;

    while (i <= elem)
    
        elem[i] = 1;    
        i += 1;
    

    return elem;

我知道问题出在elem[i] = 1; 的左侧,但我不明白如何正确处理。 Elem 是一个字节数组,我想把 1 放在第 i 位上。

这是伪代码:

1. i ←1;
2. while i ≤ k do
3. b[hi (delta)] ← 1;
4. i ← i + 1;

PS。我只能修改函数内部的内容,不能修改传递给它的内容

【问题讨论】:

去掉const这个词,意思是常量。问题解决了。 【参考方案1】:

elem 是指向const char 的指针。所以你不能修改它。只需使其仅指向 char 即可。

【讨论】:

我不能。我只能修改函数内部的内容,不能修改我传递给它的内容! 在这种情况下,我必须说您不应该更改 elem 变量中的任何内容。我认为您必须稍微澄清一下逻辑。你能解释一下你提供的伪代码吗?【参考方案2】:

elem 数组声明为const,因此无法修改。要修改它,您需要删除 const 关键字。

然后您可以使用指针算法来更改您的值:

*(elem + i) = a value

虽然请记住,在 C 中,事物通常从零开始编号,因此对于第 i 这将是价值

*(elem + i - 1) = a value

【讨论】:

以上是关于C 错误:表达式必须是可修改的左值的主要内容,如果未能解决你的问题,请参考以下文章

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

为啥我得到的表达式必须是可修改的左值?

指向函数指针的指针 - 表达式必须是可修改的左值

表达式必须是可修改的左值(字符数组)

循环中分配的多维数组说明:表达式必须是可修改的左值

C++的结构体指针中出错:表达式必须是可修改的左值_最后发现解决方法很简单