混乱していますが、コンパイル時に、なぜホールドが整数であるのはなぜですか?文字を整数変数に格納する
int hold = value;
で
char value = 'p';
int hold = value;
printf("%c", hold);
混乱していますが、コンパイル時に、なぜホールドが整数であるのはなぜですか?文字を整数変数に格納する
int hold = value;
で
char value = 'p';
int hold = value;
printf("%c", hold);
まず、char
からint
への暗黙的な変換を行います。
printf("%c", hold);
%c
指定子で
第二には、として何かがchar
に変換し、シンボルとして、それを印刷することを意味します。
'%c'指定子は、printf()に' char'型の引数を_expect_するよう指示します。 (外部またはデフォルトの引数プロモーション)変換が行われず、変換指定子と引数の不一致が原因で未定義の動作が発生します。 'char'は整数型であることは注目に値する。 –
@DavidBowling '%c'は' int'型の引数を要求します。 – BLUEPIXY
@ BLUEPIXY--あなたは正しいです。私はスタンダードのこの部分をしばらく見ていませんが、ちょうど今ここでは 'int'が実際に' unsigned char'に変換されていることがわかります。 –
ASCIIについてのいくつかの調査を行います:) – Gam
'printf'の'%c'は 'int'を必要とします。 [printf](http://en.cppreference.com/w/c/io/fprintf)を参照してください。 – BLUEPIXY
'' p ''は整数なので、本当に '' char value = 'p''が動作する理由を尋ねるべきです! –