58

私はCまたはC++での単一引用符と二重引用符の質問を見ていました。説明が完全に理解できなかったので、プログラムを作成しました。

#include <stdio.h>
int main()
{
  char ch = 'a';
  printf("sizeof(ch) :%d\n", sizeof(ch));
  printf("sizeof(\'a\') :%d\n", sizeof('a'));
  printf("sizeof(\"a\") :%d\n", sizeof("a"));
  printf("sizeof(char) :%d\n", sizeof(char));
  printf("sizeof(int) :%d\n", sizeof(int));
  return 0;
}

私はgccとg++の両方を使用してそれらをコンパイルしました、そしてこれらは私の出力です:

gcc:

sizeof(ch)   : 1  
sizeof('a')  : 4  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  

g ++:

sizeof(ch)   : 1  
sizeof('a')  : 1  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  

g ++の出力は私には理にかなっており、私はそれについて疑いの余地はありません。gccでは、何sizeof('a')と違う必要がありsizeof(char)ますか?その背後にある実際の理由がありますか、それとも単に歴史的なものですか?

また、Cでサイズが異なる場合、それは、を書くときに暗黙の型変換を行うことを意味し charますか?'a'char ch = 'a';

4

2 に答える 2

61

'a'Cでは、has型などの文字定数int、C++ではchar

最後の質問に関しては、はい、

char ch = 'a';

をに暗黙的に変換intcharます。

于 2012-05-15T18:38:18.013 に答える
1

文字がないため、文字にリンクされた整数だけです

のように 62 だと思います

printf("%c",62); を試すと、キャラクターが表示されます

于 2012-05-22T19:19:55.380 に答える