だから、私は私のポインタを持っています:
int *p = new int(10);
そして、私は次のものを印刷します:
&p which is: 0xbdee018
p which is: 0xb8c254b0
&p
はポインターのアドレスをp
表し、 is はポインター自体によってマップされた値のアドレスを表します。
それは正しいですか、それとも正反対ですか?
はい、あなたは正しいです。
&p
ポインタのアドレスを表し、p
それが指しているアドレスを与えます。
P は int へのポインターです。(*p) は、p が指している int の値となるポインター p の値を意味します。(&p) は、ポインターのアドレスを示します。*(&p)=p を意味します。
C++ では、多くの人int* p
がint *p
. 言語の観点からは、この 2 つの間にまったく違いはありません。それは、人間の認識の問題です。
int* p
言います:「p
整数へのポインタです」。&p
は、 が格納されるメモリ位置ですp
( のデータ型に関係なくp
)。p
ポインタそのものです。その値は、整数が格納されるメモリ位置です (場合を除くp == 0
)。*p
p が指す値 (への参照) です。C では、多くの人int *p
がint* p
. 「*p
は整数です」と書かれています。これには、 anおよび anint* p, q
を宣言する のようなトラップに陥らないという利点があります。int* p
int q
値を取得するには、ポインターを逆参照する必要があると思います。
を印刷してみてください*p
。これは、アドレスに格納されている値を印刷するためです。これは参照解除されたポインターです。
を&p
印刷すると、 の住所の住所が印刷されますp
。
印刷p
すると、 へのポインタが印刷されp
ます。