int a[3]={10,20,30};
int* p = a;
cout << *p++ << endl;
wikipediaによると、接尾辞++
は逆参照よりも優先順位が高く、最初に*p++
実行p++
してから逆参照する必要があり、結果は 20 になるはずですが、実際の結果が 10 になるのはなぜですか?
int a[3]={10,20,30};
int* p = a;
cout << *p++ << endl;
wikipediaによると、接尾辞++
は逆参照よりも優先順位が高く、最初に*p++
実行p++
してから逆参照する必要があり、結果は 20 になるはずですが、実際の結果が 10 になるのはなぜですか?
p++
後置インクリメント演算子を使用します。つまり、インクリメントしますが、インクリメントする前p
に存在していた値を返します。つまり、これは次のようなことを行うのと同じです。
int a[3]={10,20,30};
int* p = a;
int* q = p;
++p;
cout << *q << endl;
10
そのようにスタイリングすると、なぜ印刷されているのかは明らかです。逆参照をインクリメントして出力したい場合p
は、プレフィックスインクリメント演算子を使用できます。
int a[3]={10,20,30};
int* p = a;
cout << *(++p) << endl;