1

重複の可能性:
C配列では、なぜこれが当てはまるのですか?a [5] == 5 [a]

C ++の参考書で、次のような文字列にアクセスする例を見つけました。

void main()
{
    char *str = "Test";
    int len, i;

    clrscr();

    len = strlen(str);
    for(i=0 ; i<len ; i++)
    {
        printf("%c", i[str]);
    }

    getch();
}

なぜ機能i[str]するのですか?iは変数であり、配列ではありません。

str[]文字列がの代わりにとして宣言されている場合にも機能します*str

4

3 に答える 3

0

Ci[str]str[i]同等であるため、これは機能します

于 2012-12-07T05:45:33.147 に答える
0

i[str]str[i]同じ方法で評価します(として*(str+i)

を宣言するstr[]と、strは配列の最初の要素へのポインタになります

于 2012-12-07T05:45:41.703 に答える
0

文字ポインタは文字列の先頭のメモリ位置を指し、配列インデックス(たとえば)は基本的に文字列の先頭に反復をstr[i]追加します。i

したがって、str + i= str[i]= i[str]=i + str

あなたがしているように、これを内部printfで使用すると、これらはすべて同じように評価されます:

printf("%c", str[i]);
printf("%c", i[str]);
printf("%c", *(str+i));
printf("%c", *(i+str));

参照:配列の場合、なぜa [5] == 5 [a]の場合ですか?

于 2012-12-07T05:46:16.490 に答える