7

次のコードでは:

void main()
{
    char a[]={1,5,3,4,5,6};
    printf("%d\n",*(a++)); //line gives error: wrong type argument to increment
    printf("%d\n",*(a+1));
}

4 行目と 5 行目の違いは何ですか。5 行目でエラーや警告が表示されません。

4

3 に答える 3

28

aは配列オブジェクトでありポインターではないため、配列オブジェクトに対して操作を使用できませんでしたa++ 。これは次と同等であるため:

a = a+ 1;

ここでは、C では許可されていない新しい値を配列オブジェクトに割り当てています。

a + 1配列の要素 1 へのポインターを返し、aそれは許可されます

于 2013-05-09T07:01:00.057 に答える
3

'a'は const ポインターのように動作します。「a」は、その値またはそれが指しているアドレスを変更できません。これは、コンパイラが配列のサイズのメモリを静的に割り当てており、参照しているアドレスを変更しているためです。

代わりに次のようにすることができます

void main()
{
char a[]={1,5,3,4,5,6};
char *ch;
ch=a;
printf("%d\n",*(ch++)); //this lines gives error no more
printf("%d\n",*(ch+1));
}
于 2013-05-09T07:06:54.287 に答える