c++ - 为什么不能将 *pointer+offset 用作左值? ("error: non-lvalue in assignment")

标签 c++ arrays pointers syntax

这是我的代码:

void doubleValuesInArray(int *pointer) {
    for (int n = 0; n < 2; n++) {
        int a = (*pointer+n);
        a = a * 2;
        *pointer+n = a;
    }
}

int main(int argc, char** argv) {
    int myArray[] = {1,2};
    doubleValuesInArray(myArray);
    cout<<myArray[0]<<endl;
    return 0;
}

输出是:

main.cpp: 在函数 `void doubleValuesInArray(int*)' 中: main.cpp:19: 错误:赋值中有非左值 make[2]: * [build/Debug/Cygwin-Windows/main.o] 错误 1 make[1]: [.build-conf] 错误 2 make: ** [.build-impl] 错误 2

我的问题是:

int a = (*pointer+n);

工作正常。变量 'a' 通过使用 *pointer + n 从数组中获取值 0 和 1。

但是

 *pointer+n = a; 

好像不行。

如果我使用 指针[n] = a; 它也有效。

为什么我的第一种方法不起作用?

最佳答案

你没有正确地把你的指针表达式括起来:* 有更高的优先级,所以你应该在加法的两边加上括号:

int a = *(pointer+n);
a = a * 2;
*(pointer+n) = a;

关于c++ - 为什么不能将 *pointer+offset 用作左值? ("error: non-lvalue in assignment"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544938/

相关文章:

c++ - `cname` 和 `name.h` 中的类型可以是不同的类型吗?

php - foreach如何遍历数组?

c++ - 为什么我的链表实现不起作用?

arrays - 使用 array_name 和 &array_name 的地址之间的区别?

c++ - -> 在智能指针中的用法

C++关于strcmp和读取文件

C++计算gpa和标准差

c++ - 是否可以使用 Visual Studio 调试 OpenGL 着色器?

java - 如何将包含数字和字母的字符串分成仅数字?

javascript - 在遍历两个数组时查找共同值