2017-05-20 8 views
1

charの配列へのポインタの値が&"hello"charの配列が異なるのはなぜですか?rvaluesのcharの配列に対するポインタが&helloとcharの配列であるのはなぜですか?

なぜpointerを配列にするか&"hello"constが必要ですが、配列はcharではありませんか?

なぜx[0] typeid名前はchar[6]ですか?

なぜ*x = temp2コンパイルエラー?

char temp[] = { 'h','e','l','l','o','\0'}; 
char temp2[] = { 'w','o','r','l','d','\0' }; 
char (*x)[6] = &temp; 
//*x = temp2;//error 
x = &temp2;//OK 
cout << typeid(x[0]).name() << endl; 


//char (*y)[6] = &"hello"; //error 
char const (*y)[6] = &"hello";//OK 

出力:配列が割り当て可能でないため

char [6] 
+0

ここにはどこにでも1つの文字列参照が表示されず、文字の配列だけが表示されます。質問は紛らわしい言葉です(そして大部分はC、唯一のC++は 'cout'の使用です) – Donnie

答えて

2

*x = temp2は動作しません、私はいくつかの質問を次れたよう

次観測が生じました。割り当て可能な配列が必要な場合は、代わりに::std::arrayを使用してください。

char (*y)[6] = &"hello"; C++の文字列リテラルはconst charの配列であるため、機能しません。

x as a pointer to array of 6 charsと宣言しているので、x[0]*x(同じもの)は、6文字の配列への参照を示します。

+0

" Detonate "...? – Quentin

関連する問題