私は試した
printf("%d, %d\n", sizeof(char), sizeof('c'));
そして、出力として1、4を得ました。文字のサイズが1の場合、なぜ'c'
4ください。整数だからだと思います。だから私がするときchar ch = 'c';
char変数に割り当てられたときに、その4バイトの値から1バイトの値への暗黙的な変換が内部で発生していますか?
Cでは、 'a'は整数定数(!?!)なので、アーキテクチャーには4が適切です。割り当てのために暗黙的にcharに変換されます。 sizeof(char)は、定義により常に1です。標準では1が何であるかは明記されていませんが、多くの場合はバイトです。
C標準では、「a」などの文字リテラルはchar型ではなくint型であると規定されています。したがって、(プラットフォーム上で)sizeof == 4になります。詳細については、 この質問 を参照してください。
sizeof
演算子の通常の動作です( Wikipedia を参照):
sizeof
はデータ型のサイズを返します。 char
の場合、1を取得します。sizeof
は変数または式の型のサイズを返します。文字リテラルはint
として入力されるため、4になります。これはISO C11でカバーされています6.4.4.4 Character constants
ただし、以前の標準とはほとんど変わっていません。それは、段落/10
:
整数文字定数の型はintです。シングルバイト実行文字にマップされる単一文字を含む整数文字定数の値は、整数として解釈されるマップされた文字の表現の数値です。
ANSI C標準によれば、char
は整数が使用されるコンテキストでint
に昇格され、printf
で整数フォーマット指定子を使用したため、異なる値。 charは通常1バイトですが、ランタイムとコンパイラに基づいて定義された実装です。