3
         #include<stdio.h>

         int main()
         {

           char ch = 'A';

           printf("%d\n",'ag');

           printf("%d\n",'a');

           printf("%d, %d, %d, %d", sizeof(ch), sizeof('a'), sizeof('Ag'), sizeof(3.14f));

          return 0;
         }

g ++とgccで実行している間、この質問の出力に多くの疑問がありました。

しかし、これらのリンクを参照することで、ほとんどすべての疑問を解消しました。

  1. C/C++ の一重引用符、二重引用符、および sizeof('a')

  2. C または C++ での一重引用符と二重引用符

この質問の出力について、まだ 1 つのことを理解する必要があります。

printf("%d\n",'ag');プログラムで上記の出力を説明してください。それは実際にどのようにメモリに保存されますか?

Linux/GCC プラットフォームでのプログラムの出力は次のとおりです。

24935
97
1, 4, 4, 4
4

2 に答える 2

5

単一引用符で囲まれたリテラルの型は ですint。そのため、サイズは通常、複数の文字に相当するビットに対して十分な大きさです。文字が解釈される正確な方法は、私の知る限り、実装に依存します。

あなたの場合、リトルエンディアンの順序になっています:

  • の ASCII 値'a'は 97 (0x61) です。
  • の ASCII 値'g'は 103 (0x67) です。

値は 24935 = 0x6167 であるため'a'、上位バイトで を取得'g'し、下位バイトで を取得しています。

于 2012-08-31T09:38:34.333 に答える
3

一重引用符で囲まれた複数の文字が何を意味するかは、実装によって異なります。

6.4.4.4

整数文字定数の型は int です。1 バイト実行文字にマップされる単一の文字を含む整数文字定数の値は、整数として解釈されるマップされた文字の表現の数値です。複数の文字 ('ab' など) を含む整数文字定数の値 、またはシングルバイト実行文字にマップされない文字またはエスケープ シーケンスを 含む整数文字定数の値は、実装定義です。

たとえば、この場合249350x6167次のようになります。文字の ASCII 値ag並べて表示されます。

于 2012-08-31T09:38:35.803 に答える