int* p_bob = new int;
*p_bob = 78;
上記のコードは私には理にかなっています。参照解除操作を使用して新しいメモリを割り当て、値78を割り当てます。
int* p_dynint = new int[10];
*p_dynint[2] = 12;
ただし、これは意味がありません。p_dynint []で参照解除演算子を使用しようとすると、エラーが発生します。なぜ配列が違うのでしょうか?
int* p_bob = new int;
*p_bob = 78;
上記のコードは私には理にかなっています。参照解除操作を使用して新しいメモリを割り当て、値78を割り当てます。
int* p_dynint = new int[10];
*p_dynint[2] = 12;
ただし、これは意味がありません。p_dynint []で参照解除演算子を使用しようとすると、エラーが発生します。なぜ配列が違うのでしょうか?
*p_bob = 78;
これは、 ( を表す) が78
指すメモリに値を代入します。p_bob
int
p_dynint[2] = 12;
3 番目の要素にアクセスするだけです。
p_dynint[2]
は実際には と同等*(p_dynint+2)
です。
p_dynint[2]
と同等*(p_dynint + 2)
です。デリファレンスは、演算子で暗示され[]
ます。
これを行うことは実際の問題ではありません:
int* p_dynint=new int[10];
//write first element
*p_dynint=10;
//write second element
*(p_dynint+1)=20;
//write three elements to std::cout
std::cout<<p_dynint[0]<<p_dynint[1]<<p_dynint[10]<<std::endl;
この例では、配列の問題も強調しています。何でも読み書きできます。によって生成される出力p_dynint[10]
は int ですが、その値は int に変換された次の数バイトにすぎません。
可能であればコンテナーを使用してください (詳細な理由については、こちらをお読みください)