CまたはC++プログラミングで単一引用符と二重引用符を使用する必要があるのはいつですか?
CおよびC++では、単一引用符で単一文字を識別し、二重引用符で文字列リテラルを作成します。 'a'
は単一の文字リテラルであり、"a"
は'a'
とヌルターミネータ(2文字の配列)を含む文字列リテラルです。
C++では、文字リテラルの型はchar
ですが、Cでは、文字リテラルの型はint
であることに注意してください。つまり、intが32ビットのアーキテクチャーでは、sizeof 'a'
は4です。 (およびCHAR_BITは8)、sizeof(char)
はすべて1です。
一部のコンパイラは、複数文字の定数を許可する拡張機能も実装しています。 C99標準は次のように述べています。
6.4.4.4p10: "複数の文字(たとえば、 'ab')を含む整数文字定数の値、またはシングルバイト実行文字にマッピングされない文字またはエスケープシーケンスを含む整数定数の値は、実装定義です。 」
これは、たとえば次のようになります。
const uint32_t png_ihdr = 'IHDR';
結果の定数(これを実装するGCCで)は、各文字を取得して上にシフトすることで得られる値を持っているため、「I」は32ビット値の最上位ビットになります。明らかに、プラットフォームに依存しないコードを書いているなら、これに頼るべきではありません。
一重引用符は文字(char
)であり、二重引用符はNULLで終わる文字列(char *
)です。
char c = 'x';
char *s = "Hello World";
'x'
は整数であり、マシンの文字セットの文字xの数値を表します"x"
は、‘x’
の後に‘\0’
が続く2文字の文字の配列です。単一引用符は、単一文字用です。二重引用符は、文字列(文字の配列)用です。必要に応じて、単一引用符を使用して、一度に1文字ずつ文字列を作成できます。
char myChar = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
私は次のようなものをいじっていました:int cc = 'cc';基本的には、バイト単位の整数へのコピーです。したがって、それを見る方法は、基本的に2 cである 'cc'が整数ccの下位2バイトにコピーされることです。トリビアを探しているなら、
printf("%d %d", 'c', 'cc'); would give:
99 25443
25443 = 99 + 256 * 99であるためです
したがって、「cc」は複数文字の定数であり、notは文字列です。
乾杯
single quote
はcharacter
用です。double quote
はstring
用です。Cでは、「a」などの単一引用符は文字定数を示しますが、「a」は常に0文字で終わる文字の配列です。
二重引用符は、文字列リテラル用です、例:
char str[] = "Hello world";
単一引用符は、単一文字リテラル用です、例:
char c = 'x';
EDIT Davidが別の回答で述べたように、文字リテラルのタイプはint
です。
一重引用符は文字を表し、二重引用符は文字列を表します。
Javaでも同じです。
文字には一重引用符が使用され、文字列には二重引用符が使用されます。
printf("%c \n",'a');
printf("%s","Hello World");
ハローワールド
逆にこれらを使用し、文字列に一重引用符を使用し、文字に二重引用符を使用した場合。ここでは、これが結果になります。
printf("%c \n","a");
printf("%s",'Hello World');
最初の行に。ガベージ値または予期しないものがあります。または、このように出力される場合があります。
�
一方、2番目のステートメント。何も表示されません。もう一つ。この後にさらに声明がある場合。また、結果は表示されません。
注:PHP言語は、単一引用符と二重引用符を簡単に使用できる柔軟性を提供します。
次のように、単一文字で単一引用符を使用します。
char ch = 'a';
ここで'a'
はchar定数であり、char aのASCII
値と等しくなります。
次のように文字列で二重引用符を使用します。
char str[] = "foo";
ここで"foo"
は文字列リテラルです。
"a"
を使用しても問題ありませんが、 'foo'
を使用しても問題ありません