私は C++ を学んでいますが、答えが見つからない質問があります。
char
定数 (一重引用符を使用) と文字列定数 (二重引用符を使用)の違いは何ですか?
char 配列 vs に関連するすべての検索結果std::string
。私は と の違いを求め'a'
てい"a"
ます。
次のことを行うことに違いはありますか?
cout << "a";
cout << 'a';
'a'
文字リテラルです。タイプchar
は で、ほとんどのシステムで値は 97 です (文字の ASCII/Latin-1/Unicode エンコーディングa
)。
"a"
文字列リテラルです。タイプは で、値とを持つconst char[2]
2 の配列を参照します。すべてではありませんが、ほとんどのコンテキストで、への参照は文字列の最初の文字へのポインタに暗黙的に変換されます。char
'a'
'\0'
"a"
両方
cout << 'a';
と
cout << "a";
たまたま同じ出力が生成されますが、理由は異なります。1 つ目は、1 文字の値を出力します。2 番目は、文字列のすべての文字 (終端の を除く'\0'
) を連続して出力します。これはたまたま単一の文字'a'
です。
文字列リテラルは、 のように任意に長くすることができます"abcdefg"
。文字リテラルには、ほとんどの場合、1 文字だけが含まれます。(などの複数文字リテラル'ab'
を使用できますが、それらの値は実装定義であり、ほとんど役に立ちません。)
(あなたが尋ねなかった C では、'a'
タイプはint
で"a"
あり、タイプはchar[2]
(no const
) です)。
"a"
\0
は、たまたま 1 文字しか含まれていない文字の配列です。最後にを数えた場合は 2 文字です。'a'
1文字です。それらは同じものではありません。例えば:
#include <stdio.h>
void test(char c) {
printf("Got character %c\n", c);
}
void test(const char* c) {
printf("Got string %s\n", c);
}
int main() {
test('c');
test("c");
}
これは、2 つの異なるオーバーロードを使用します。デモについては、 http://codepad.org/okl0UcCNを参照してください。
文字リテラルは一重引用符で囲みます。二重引用符は、文字列 (文字配列) リテラルを囲むために使用されます。
などの多くのインターフェイスは、cout <<
どちらも受け入れます。
'a' の場合は 1 文字です。したがって、そのサイズは 1 バイトになります。
char str[]="a";
また
char *ptr = "c";
for 'c' -> char c = 'a';
または、同様に書くこともできます
char c = 97;
一重引用符'a'
は type のリテラルですchar
。二重引用符"a"
は、s のヌル終了文字列リテラルですchar
。
'a' - 1) 文字定数 2) サイズ - 1 文字 3) 文字配列のコレクションではありません
"a" -1) 文字列リテラル 2) サイズ - 2 文字 3) 文字配列のコレクション