这是我的代码:
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/