5

次のコードは、出力を「d」として表示します。

void main()
{

  short int a=5;

   printf("%d"+1,a);

   getch();

}

printf()実際にはどのように機能しますか?

4

3 に答える 3

6

printf"%d"プラス 1へのポインタを渡しているため、書式指定子を「認識」しません。これは"d"、それ自体を渡すことと同じです:

printf("d", a);

出力dして無視しaます。これは に固有のものprintfではありません。ポインター演算はchar、文字列リテラル (つまり、二重引用符で囲まれた文字列) から取得されたポインターを含むすべてのポインターで同様に機能します。

于 2012-09-27T15:59:34.163 に答える
3

printf("%d"+1,a);これは、フォーマット指定子が 1 つしかなく、これ ("%d"+1) がエラーを生成するため、表示されない問題です。

printf("%d+1",a);または_printf("%d",a+1);

于 2012-09-27T15:59:24.197 に答える
1

"%d" などの文字列リテラルは配列式であり、ほとんどのコンテキストでは、配列式は、値が配列の最初の要素のアドレスであるポインター式に変換されます。

商品アドレス 00 01 02 03
----- ------- -- -- -- --
"%d" 0xfffbec00 '%' 'd' 0 ??

文字列リテラル "%d" はアドレス 0xfffbec00 から始まります (たとえば)。を記述することにより"%d"+1、結果のポインター値に 1 を追加する (0xfffbec01 を与える) ことになるため、実質的に文字列リテラル "d" を に渡しますprintf

文字列 "d" には書式指定子が含まれていないため、printf文字列をそのまま出力します。引数aはに渡される前に評価さprintfれますが、それ以外は無視されます。

于 2012-09-27T16:46:44.263 に答える