重複の可能性:
左辺値に必要なエラー
Cプログラムでエラーが発生しました
main () {
int arr[] = {1, 2, 3, 4};
printf("%d", *arr);
arr++;
printf("%d", *arr);
}
このコードをコンパイルすると、左辺値が必要なエラーが発生します。arr++の行の場合。助けて!
重複の可能性:
左辺値に必要なエラー
Cプログラムでエラーが発生しました
main () {
int arr[] = {1, 2, 3, 4};
printf("%d", *arr);
arr++;
printf("%d", *arr);
}
このコードをコンパイルすると、左辺値が必要なエラーが発生します。arr++の行の場合。助けて!
arr
は定数であり、その値を変更することはできません。あなたは追加することができます
int *p = arr;
そして、
p++;
問題はarr
、配列であり、配列は左辺値ではないということです。ポインタが必要です。
int arr[] = {1, 2, 3, 4};
int *p = &arr;
printf("%d", *p);
p++;
printf("%d", *p);
lvalue
通常、代入(=)演算子の左側の値を指します。arr++
はの省略形なのでarr = arr + 1
、それが参照しているものです。
基本的に、配列としてarrし、配列の値を変更することはサポートされていません。配列へのポインタが必要だと思います。ポインタは、コードが試みる方法でインクリメントできます。
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 。
およびの前置および後置バージョンのオペランドは、変更可能な左辺値である必要があります++
。--
残念ながら、などの配列式arr
は変更できない左辺値であるため、エラーメッセージが表示されます。
ポインタ式を使用して配列をウォークする場合は、2番目のポインタを宣言し、配列の最初の要素を指すように設定する必要があります。
int *p = arr; // or &arr[0] - in this context they evaluate to the same thing