1

这是我的代码:

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; 它也可以。

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

4

3 回答 3

4

您没有正确地为指针表达式加上括号:*具有更高的优先级,因此您应该在加法周围添加括号:

int a = *(pointer+n);
a = a * 2;
*(pointer+n) = a;
于 2012-11-24T19:50:58.883 回答
3

很清楚 -*pointer+n是一个 r 值 - 意味着你不能分配给它。

你的意思是

*(pointer+n) = a;

因为两者不同。*pointer+n简单地返回数组的第一个元素并添加n到它(结果是一个 r 值)。*(pointer+n)是第 n 个元素(l 值)。

于 2012-11-24T19:50:05.217 回答
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;
    }
}
于 2012-11-24T19:50:49.313 回答