C++ では以下が有効です
int *p = new int[3];
*p=0;
*(++p)=1;
以下も有効です
int j[] = { 0, 1, 2};
*j = 3;
与えられた, *j =3 が機能する, 以下が無効である理由
*(++j)=4;//invalid.. lvalue required as increment operand
C++ では以下が有効です
int *p = new int[3];
*p=0;
*(++p)=1;
以下も有効です
int j[] = { 0, 1, 2};
*j = 3;
与えられた, *j =3 が機能する, 以下が無効である理由
*(++j)=4;//invalid.. lvalue required as increment operand
このような表現に
*(++j)=4;//invalid.. lvalue required as increment operand
j
これは配列 int[3] であり、その配列の最初の要素へのポインターに「減衰」します。そのポインターは右辺値であり、割り当てることができないため、次のようなことはできません*(++j)
。
あなたの他の例p
では、非 const であり、割り当てることができるポインターです:
int *p = new int[3];
*p=0;
*(++p)=1;
右辺値で取得する動作は、const ポインターで発生する動作に似ています。
int const *p = new int[3];
*p=0;
*(++p)=1;
配列とポインターは似ていますが、これは異なる場所の 1 つです。
配列を反復処理する場合は、別のポインター変数を使用します。
int j[] = { 0, 1, 2};
int* jp = j;
jp
の最初の要素を指しj
ます。それで:
*(++jp) = 4;
動作します。