私は自分自身にC++を教えています。これは私の最初のプログラミング言語であり、私はポインタのメモリ割り当てに関連する言葉に苦労しています。C++ポインタとメモリの割り当て
は、この文を考えてみましょう:
int *p;
int x;
p = &x;
*p = 8;
Value
&p 1400
p 1800
*p 8
x 8
&のpは、pのメモリアドレスです。
pは、ポインタpによって指し示されるメモリアドレスです。
* pは、ポインタpが指すメモリアドレスの値です。
私はこれを理解しています。しかし、本の状態:
p = & xはxのアドレスをpに格納します。ただし、新しいメモリは割り当てられません。
これは混乱します。メモリが割り当てられている。そうでなければ、pは未定義である。
は今この文を考えてみます。
int *p;
p = new int;
*p = 28;
をここでは、メモリが割り当てられているので、* pは有効かつ有意義にするために、追加の変数が必要いけません。
彼の文の著者の意味は何である、「メモリが割り当てられていない。」、コードブロックを考えるとき:
だから、私は私の質問がされると思いますか?
おそらくメモリが 'p'と' x'以外に割り当てられていないことを意味します。または、動的メモリ割り当てが行われませんでした。または両方。 – juanchopanza
'p =&x;'ここで 'p'は' x'のメモリ位置を指していますので、すでに割り当てられている*(スタック上にある)メモリ位置が共有されるため、メモリは割り当てられません。 –
これは単なるセマンティクスです。スタック上のオブジェクトを宣言するCやC++の世界では、(通常は)メモリ割り当てと呼ばれていません。逆に、メモリ割り当ては通常、動的メモリ割り当てを意味します。その特定の本ではなくむしろちょっとした言葉遣いです。 –