这是我的代码:
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;
似乎不起作用。
如果我使用 pointer [n] = a; 它也有效。
为什么我的第一种方法不起作用?
答案 0 :(得分:4)
您没有正确地将指针表达式括起来:*
具有更高的优先级,因此您应该在添加中添加括号:
int a = *(pointer+n);
a = a * 2;
*(pointer+n) = a;
答案 1 :(得分:3)
很明显 - *pointer+n
是一个r值 - 这意味着你无法分配它。
你的意思是
*(pointer+n) = a;
因为两者不同。 *pointer+n
只返回数组的第一个元素并向其添加n
(结果是r值)。 *(pointer+n)
是第n个元素(l值)。
答案 2 :(得分:3)
你正在做的事情是完全错误的。解除引用运算符*
的优先级(优先级)高于+
,因此*pointer + n
将n
添加到值pointer
指向。校正:
void doubleValuesInArray(int *pointer) {
for (int n = 0; n < 2; n++) {
int a = *(pointer+n);
a = a * 2;
*(pointer+n) = a;
}
}