0

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
4

2 に答える 2

3

このような表現に

*(++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;
于 2012-04-05T06:17:47.123 に答える
0

配列とポインターは似ていますが、これは異なる場所の 1 つです。

配列を反復処理する場合は、別のポインター変数を使用します。

int j[] = { 0, 1, 2};    
int* jp = j;

jpの最初の要素を指しjます。それで:

*(++jp) = 4;

動作します。

于 2012-04-05T05:15:12.940 に答える