あなたには、いくつかの型の変数を宣言した場合は、また、それに別の変数のポインティングを宣言することができます。例えば
:
int a;
int* b = &a;
だから本質的には、それぞれの基本的なタイプのために、我々はまた、対応するポインタ型を持っています。
たとえば、short
およびshort*
です。
(それはおそらく最も初心者を混乱させる何)変数b
「見」するには、2つの方法があります。
あなたがタイプint*
の変数としてb
を考慮することができますが。
*b
は、タイプint
の変数として考えることができます。
したがって、int* b
と宣言する人もあれば、int *b
と宣言する人もいます。
しかし、実際には、これらの2つの宣言は同じです(スペースは無意味です)。
b
を整数値へのポインタとして使用するか、実際に指し示された整数値として*b
を使用できます。
狙った値:int c = *b
を取得(読み取り)できます。
そして、指し示された値:*b = 5
を設定(書き込む)することができます。
ポインタは、以前に宣言したことを任意のメモリアドレスに、とだけでなく、いくつかの変数のアドレスを指すことができます。ただし、ポインティングされたメモリアドレスにある値を取得または設定するためにポインタを使用する場合は注意が必要です。例えば
:ここ
int* a = (int*)0x8000000;
、我々はメモリアドレス0x8000000に変数a
ポインティングを持っています。
このメモリアドレスがプログラムのメモリ空間内にマップされていない場合、メモリアクセス違反のために*a
を使用する読み取りまたは書き込み操作は、プログラムがクラッシュする可能性があります。
a
の値を安全に変更することはできますが、*a
の値を変更する際は非常に注意が必要です。それを見て
1つはポインタ(つまりメモリアドレス)です。これは16進値です。もう1つはそのアドレスの内容です。 –
ポインタの前にある '*'は、ポインタの「参照解除」を意味するか、それをトラバースすることを意味します。型の後の '*'は型へのポインタを示します。ポインタとは、情報が格納されているメモリのどこかへの方向にすぎません。 –
'cout << pointerToInteger'は' pointerToInteger'が指すアドレスを表示します。 'cout << * pointerToInteger'はそのアドレスに格納されている* contents *を出力します。これを次のように考えてみましょう: 'pointerToInteger'はあなたの家の前にあるメールボックスです。 '* pointerToInteger'はそのメールボックスの中身です。 –