0

プログラム:

   int main( )
    {
    printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));
    return 0;
    }

出力:

5 57 73

私はCが初めてで、5 57 7がどこから来たのか推測できましたが、3がどこから来たのかわかりません。誰かが出力を説明できますか?

4

4 に答える 4

7

バイナリAND3and 3(ネストされた両方のprintf呼び出しの戻り値)に適用すると3、結果として得られます。

ネストされた呼び出しの順序が定義されていないため、コードには実際には未定義の動作が含まれていることに注意してください。

于 2012-07-29T16:41:35.670 に答える
6

関数の戻り値は、printf送信された文字数、またはエラーがある場合は負の値です。

printf("%d %d",5,5)3エラーがなければ返します

printf("%d %d",7,7)3エラーがない場合も返します

と評価されるものもそうprintf("%d %d",5,5) & printf("%d %d",7,7)です。3 & 33

于 2012-07-29T16:42:13.767 に答える
2

3 は、2 つの printf によって返される値 のビットごとの ANDです。

printf は、印刷された文字数を返します。あなたの場合、printf("%d %d",5,5)2 つの 5 と 1 つのスペースである 3 つの文字を印刷しています。同様に、printf("%d %d",7,7)2 つの 7 と 1 つのスペースも印刷しています。したがって、両方の printf が 3 を返します。

したがって、3 は次の結果です。3 & 3

于 2012-07-29T16:43:46.047 に答える
0

ここでわかるように: http://en.wikipedia.org/wiki/Printf_format_string、printfは印刷された文字の数を返すので、:

printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));

から構成されています :

printf("%d %d",5,5) return 3 (5 space and 5) and print 5 5

printf("%d %d",7,7) return 3 (7 space and 7) and print 7 7

この段階で得たもの:5 57 7

そして3 & 3 = 3、最終的に次の出力が得られました。

5 57 73

よろしく。

于 2012-07-29T17:51:56.543 に答える