0
int* p_bob = new int;

*p_bob = 78;

上記のコードは私には理にかなっています。参照解除操作を使用して新しいメモリを割り当て、値78を割り当てます。

int* p_dynint = new int[10];
*p_dynint[2] = 12;

ただし、これは意味がありません。p_dynint []で参照解除演算子を使用しようとすると、エラーが発生します。なぜ配列が違うのでしょうか?

4

3 に答える 3

4

*p_bob = 78;これは、 ( を表す) が78指すメモリに値を代入します。p_bobint

p_dynint[2] = 12;3 番目の要素にアクセスするだけです。

p_dynint[2]は実際には と同等*(p_dynint+2)です。

于 2012-06-12T14:04:09.060 に答える
2

p_dynint[2]と同等*(p_dynint + 2)です。デリファレンスは、演算子で暗示され[]ます。

于 2012-06-12T14:04:56.377 に答える
-1

これを行うことは実際の問題ではありません:

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 に変換された次の数バイトにすぎません。

可能であればコンテナーを使用してください (詳細な理由については、こちらをお読みください)

于 2012-06-12T14:22:13.437 に答える