文字列の配列
constのchar *
のみ*変数がchar *変数を割り当てることができない文字列のconst char型に割り当てることができます。
const char* a = "abcde";
自動的に文字列配列「\ 0」の最後に追加。上記の手順については、[5]は「\ 0」である[5]出力は、単一の文字である場合、索引付けされてもよいが、何文字かを決定することができない後に、出力は、空です。
あなたは、文字列の長さを見つけるために)(strlenを使用することができます。エンド長さが含まれていません「\ 0」です。
cout << strlen(a) << endl;
文字列の配列は、直接出力coutをすることができ
cout << a << endl;
printfの出力を使用してもよいです
printf("%s", a);
printf(a);//以上两种printf都行
CONST CHAR []
これは、定義の中で初期化する必要があります。これは、文字列で初期化する必要があります。唯一の初期化文字列に割り当てることができ、そして残り時間が割り当てることはできません。
const char b[] = "abc";
b = "def";//错
初期化は、すなわち、最後の「\ 0」の長さを含め、文字列の長さ+ 1に長さ、配列の長さをデフォルトに指定されていない場合。指定された長場合、配列の長さは、指定された長さであり、文字列の長さは+1が割り当てられているよりも大きくなければなりません。
初期化文字列の後、残りのすべてのビットが「\ 0」に初期化されています。
変数の型は、CONSTチャー[配列の長さ]です。取得するために使用可能な型ID(配列名).nameの()。
STRLEN文字列の長さの要件を使用することができます。これは、文字列の長さではなく、配列の長さであることに留意されたいです。「\ 0」を含まない長さの最初の「\ 0」に文字列の長さは、あります。
これは、直接出力はcoutまたはprintfのことができます
cout << b << endl;
printf("%s\n", b);
printf(b);
文字の配列
CHAR []
これは、定義で初期化することはできません。これは、文字列で初期化することができます。それが唯一の初期化文字列に割り当てることができ、残りの時間はそれほど割り当てることはできません。
char b[] = "abc";
b = "def";//错
初期化は、すなわち、最後の「\ 0」の長さを含め、文字列の長さ+ 1に長さ、配列の長さをデフォルトに指定されていない場合。指定された長場合、配列の長さは、指定された長さであり、文字列の長さは+1が割り当てられているよりも大きくなければなりません。
初期化文字列の後、残りのすべてのビットが「\ 0」に初期化されています。
空の配列を初期化することができ、その後、指定された配列の長さが必要。
char array[20] = { NULL };
これは、可変型char [配列の長さ]です。取得するために使用可能な型ID(配列名).nameの()。
STRLEN文字列の長さの要件を使用することができます。これは、文字列の長さではなく、配列の長さであることに留意されたいです。「\ 0」を含まない長さの最初の「\ 0」に文字列の長さは、あります。
これは、直接出力はcoutまたはprintfのことができます
cout << b << endl;
printf("%s\n", b);
printf(b);
すべてのアレイ内であれば「\ 0」が削除され、あなたはCOUTまたはprintfのが、出力が熱くなりますことができます。
CHAR *
CHAR []変数(ポインタ)はCHAR *変数に割り当てることができます。
char b[] = "abc";
char* a = b;
文字列は、直接のchar *に割り当てることはできません。
char* a = "abc";//错
char *必要が初期化する、あるいはどこのポイントに、非常に危険なのか分かりません。
char* a;//此处写法是错误的,不能这样初始化,
//初始化时需要指向某个地址,否则指针所指地址是不明确的,容易出问题。
a[0] = 'a';//可以依次对数组元素赋值。
a[1] = 'b';
CHAR *が割り当てられていない、初期化されていない場合、変数Aを使用することができないstrlenを、定義されていない場合、そのまま出力COUTまたはprintf関数とすることができません。
strlenをCHAR *初期化またはchar []変数に割り当てられているが、使用することができる場合、結果は含まない最初の「\ 0」の長さの配列、「\ 0」です。あなたはまた、直接COUTとprintfの出力を使用することができます。
cout << strlen(a) << endl;
cout << a << endl;
printf("%s\n", a);
この時点炭で型IDの文字です。
問題のポインタアドレス
文字列に格納されたメモリアドレスへのchar []の点は、この時定数は、文字列記憶領域に格納されます。
文字列に格納されたメモリアドレスへのconstのchar []の点は、この時定数は、文字列記憶領域に格納されます。
記憶領域へのconstのchar *アドレス定数ポイント、文字列がメモリに格納されていません。
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << (str1 == str2) << endl;
cout << (str3 == str4) << endl;
cout << (str5 == str6) << endl;
結果は