3
   #include<stdio.h>
    int main()
    {
        char s[]="chomsky the great";
        printf("try0 %s\n",s+s[3]-s[9]);    
        printf("try1 %s\n",s+s[3]-s[1]);
        return 0;
    }   

gcc コンパイラの o/p は

        try0 ky the great
        try1 ky the great

ここでプログラムが実際に何をしているのか、またはコンパイラがどのように機能しているかを追跡することはできません。

4

3 に答える 3

4
s+s[3]-s[9] = s + *(s+3) - *(s+9) = s + 'm'- 'h' = s + 109 - 104 =  s + 5 = s[5] 

したがって、printf は s[5] で印刷を開始します。

printf が出力する例:

printf("%s",s) = chomsky the great

printf("%s",s[0]) = chomsky the great

printf("%s",s[2]) = omsky the great

printf("%s",s[5]) = ky the great
于 2013-03-28T23:23:42.250 に答える
3

s[3]ですms[9]s[1]は両方hです。 m-はh5 s[5]です。 in で始まる文字列です。 kchomskys + s[3] - s[9]s + 5kchmosky

于 2013-03-28T23:23:05.237 に答える
3

Cのchar型も整数型のように扱うことができます。

s文字列の最初の文字へのポインタです。 3 番目の文字と 9 番目の文字のASCIIs[3]-s[9]コードを減算し、数値を返します。

その後、その数値が文字列の最初の文字へのポインターに追加され ( s+s[3]-s[9])、文字列の先頭から 5 桁後のアドレスになります。

そのアドレスを関数に渡すと、そのprintf()アドレスから文字列の末尾までの文字列が出力されます。

于 2013-03-28T23:32:02.460 に答える