プログラム:
int main( )
{
printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));
return 0;
}
出力:
5 57 73
私はCが初めてで、5 57 7がどこから来たのか推測できましたが、3がどこから来たのかわかりません。誰かが出力を説明できますか?
プログラム:
int main( )
{
printf("%d",printf("%d %d",5,5)&printf("%d %d",7,7));
return 0;
}
出力:
5 57 73
私はCが初めてで、5 57 7がどこから来たのか推測できましたが、3がどこから来たのかわかりません。誰かが出力を説明できますか?
バイナリAND
を3
and 3
(ネストされた両方のprintf
呼び出しの戻り値)に適用すると3
、結果として得られます。
ネストされた呼び出しの順序が定義されていないため、コードには実際には未定義の動作が含まれていることに注意してください。
関数の戻り値は、printf
送信された文字数、またはエラーがある場合は負の値です。
printf("%d %d",5,5)
3
エラーがなければ返します
printf("%d %d",7,7)
3
エラーがない場合も返します
と評価されるものもそうprintf("%d %d",5,5) & printf("%d %d",7,7)
です。3 & 3
3
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
ここでわかるように: 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
よろしく。