2017-05-26 8 views
0

混乱していますが、コンパイル時に、なぜホールドが整数であるのはなぜですか?文字を整数変数に格納する

int hold = value; 

char value = 'p'; 
int hold = value; 
printf("%c", hold); 
+0

ASCIIについてのいくつかの調査を行います:) – Gam

+0

'printf'の'%c'は 'int'を必要とします。 [printf](http://en.cppreference.com/w/c/io/fprintf)を参照してください。 – BLUEPIXY

+1

'' p ''は整数なので、本当に '' char value = 'p''が動作する理由を尋ねるべきです! –

答えて

3

まず、charからintへの暗黙的な変換を行います。

printf("%c", hold); 

%c指定子で

第二には、として何かがcharに変換し、シンボルとして、それを印刷することを意味します。

+0

'%c'指定子は、printf()に' char'型の引数を_expect_するよう指示します。 (外部またはデフォルトの引数プロモーション)変換が行われず、変換指定子と引数の不一致が原因で未定義の動作が発生します。 'char'は整数型であることは注目に値する。 –

+2

@DavidBowling '%c'は' int'型の引数を要求します。 – BLUEPIXY

+0

@ BLUEPIXY--あなたは正しいです。私はスタンダードのこの部分をしばらく見ていませんが、ちょうど今ここでは 'int'が実際に' unsigned char'に変換されていることがわかります。 –

関連する問題