1

C でコードの出力を確認しています。コードは次のとおりです。

main()
{
    struct temp 
    {
        int a;
        float b;
    }t;

    t.a = 5;
    t.b = 2.0;

    printf( "%d   %d    %f" , t, t.a ,t.b); // printing  5  0   0.0000000 ...why?? 
    printf( "%d   %f    %d" , t.a, t.b ,t); // printing  5  2.000000  5 
}

このプログラムの出力はどうなりますか? "t" は何を表示しますか? これに対する動作が定義されていない場合、動作が未定義になることがC標準で指定されています。

4

2 に答える 2

5

はい、未定義の動作です。標準の対応する部分は次のとおりです。

§ 7.21.6fprintf関数

変換指定が無効な場合、動作は未定義です。対応する変換指定に対して正しい型でない引数がある場合、動作は未定義です。

于 2013-08-01T10:44:39.240 に答える