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; 

動作しないようです。

pointer[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それに追加するだけです (この結果は右辺値です)。*(pointer+n)n 番目の要素 (左辺値) です。

于 2012-11-24T19:50:05.217 に答える
3

それはあなたがしていることはまったく間違っています。逆参照演算子*は よりも優先度 (優先度) が高い+ため、値が指す値*pointer + nに追加されます。修正:npointer

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 に答える