45

私は試した

printf("%d, %d\n", sizeof(char), sizeof('c'));

出力として1、4を取得しました。文字のサイズが 1 の場合、なぜ'c'4 になるのですか? 整数だからだと思います。それで、私がそうするときchar ch = 'c';、それがchar変数に割り当てられたときに、その4バイト値から1バイト値への暗黙的な変換がボンネットの下で起こっていますか?

4

5 に答える 5

36

C では 'a' は整数定数 (!?!) であるため、アーキテクチャには 4 が適切です。割り当てのために暗黙的に char に変換されます。sizeof(char) は、定義により常に 1 です。標準では、単位 1 が何であるかは示されていませんが、多くの場合、バイトです。

于 2010-02-12T13:31:45.453 に答える
7

C標準では、「a」のような文字リテラルはint型であり、char型ではないとされています。したがって、(プラットフォーム上で)sizeof == 4になります。詳細については、この質問を参照してください。

于 2010-02-12T13:35:46.260 に答える
5

これはsizeofオペレーターの通常の動作です(ウィキペディアを参照)。

  • データ型の場合、データ型sizeofのサイズを返します。の場合char、1を取得します。
  • sizeofの場合、変数または式の型のサイズを返します。文字リテラルがとして入力されるとint、4が得られます。
于 2010-02-12T13:41:04.377 に答える
0

ANSI C 標準によると、整数が使用されるコンテキストでacharが an に昇格されます。したがって、異なる値で整数フォーマット指定子を使用しました。char は通常 1 バイトですが、これはランタイムとコンパイラに基づいて定義された実装です。intprintf

于 2010-02-12T13:30:21.857 に答える