6

プレーン リテラルはアドレスを参照し、*literal はアドレスの実際の値を参照しますか? だから後:

int i = 0;
int *iPointer = &i;

次の式は、VALUE AT メモリ アドレス &i を検索します。

*iPointer

以下は単にメモリアドレス &i を生成します:

iPointer

私は一歩踏み出して仮説を検証しましたが、確認したいと思います (これらのことは決してわかりません)。

宣言とアクセスにおける * 記号の異なる目的に混乱しているだけだと思います。

4

2 に答える 2

8

はい、その通りです。

&また、コンテキストによっては、参照も宣言できることに注意してください。

宣言*は、ポインター型を宣言します。

ポインター ( など) に適用すると、逆参照演算子*ptrを表し、ポインターが指す値を返します。

operator *オーバーロードできることに注意してください。したがって、ポインターだけでなくオブジェクトにも適用して、必要なことを実行させることができます。

于 2012-08-13T17:08:02.087 に答える
2

宣言は使用を模倣します。

整数値を指すポインタがある場合、次のように単項演算子でp逆参照することによってその整数値にアクセスします。p*

x = *p;

の型*pintであるため、 の宣言p

int *p;

変数 の型pは「へのポインタint」またはint *. ただし、宣言は式の型が となるように記述されて *pますint

したがって、 が指す整数値にアクセスするときはいつでもp、 を使用する必要があります*p。に含まれるアドレス値だけを気にする場合はp、単に を使用しますp。たとえば、NULL ポインターを逆参照すると未定義の動作が発生するため、少なくともポインター値を逆参照する前に、その値が NULL でないことを確認する必要があります。

if (p != NULL)
  x = *p;

条件では、 に含まれる値に関心があるpため、逆参照しません。ステートメントでは、 への値p ポイントに関心があるため、そこで逆参照します。

宣言に注意してください

int* p, q;

と同じです

int *p;
int q;

その中でのみp、ポインタとして宣言されています。q通常の として宣言されていintます。

于 2012-08-13T18:11:52.993 に答える