文字列または文字列の配列

文字列の配列

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;

結果は
ここに画像を挿入説明

公開された52元の記事 ウォンの賞賛0 ビュー681

おすすめ

転載: blog.csdn.net/UniversityGrass/article/details/104681744
おすすめ