1

重複の可能性:
左辺値に必要なエラー

Cプログラムでエラーが発生しました

main () {
    int arr[] = {1, 2, 3, 4};
    printf("%d", *arr);
    arr++;
    printf("%d", *arr);
}

このコードをコンパイルすると、左辺値が必要なエラーが発生します。arr++の行の場合。助けて!

4

5 に答える 5

5

arrは定数であり、その値を変更することはできません。あなたは追加することができます

int *p = arr;

そして、

p++;
于 2012-02-27T17:13:56.563 に答える
3

問題はarr、配列であり、配列は左辺値ではないということです。ポインタが必要です。

int arr[] = {1, 2, 3, 4};
int *p = &arr;
printf("%d", *p);
p++;
printf("%d", *p);
于 2012-02-27T17:14:57.140 に答える
2

lvalue通常、代入(=)演算子の左側の値を指します。arr++はの省略形なのでarr = arr + 1、それが参照しているものです。

基本的に、配列としてarrし、配列の値を変更することはサポートされていません。配列へのポインタが必要だと思います。ポインタは、コードが試みる方法でインクリメントできます。

于 2012-02-27T17:15:39.067 に答える
1

arrは一定であるため、値を変更することはできません。

シンプルに保ち、次の方法でアレイにアクセスします。

int main (int argc, char *argv[]) {
    int arr[] = {1, 2, 3, 4};
    printf("arr[0] == %d\n", arr[0]);
    printf("arr[1] == %d\n", arr[1]);
    printf("arr[2] == %d\n", arr[2]);
    printf("arr[3] == %d", arr[3]);

    return 0;
}

左辺値と右辺値については、このドキュメントをお勧めします。

また、「配列はポインタではありません」に関するこのc-faq 。

于 2012-02-27T17:18:10.720 に答える
1

およびの前置および後置バージョンのオペランドは、変更可能な左辺値である必要があります++--残念ながら、などの配列式arrは変更できない左辺値であるため、エラーメッセージが表示されます。

ポインタ式を使用して配列をウォークする場合は、2番目のポインタを宣言し、配列の最初の要素を指すように設定する必要があります。

int *p = arr; // or &arr[0] - in this context they evaluate to the same thing
于 2012-02-27T18:32:55.577 に答える