2017-02-02 17 views
-2

iは違いが何であるかを理解する必要があります私はC + +を取っていることを通知する。intへのポインタとC++でのintへのポインタへのポインタの違いは何ですか?私は言語の問題を考えていないint型</p> <p>へのポインタにint型</p> <p>と</p> <p>ポインタへ</p> <p>ポインタ:

ありがとうございます!

+0

"intへのポインタ"(メモリ内で何かを見つけることができる)変数を含む変数です。 "intへのポインタへのポインタ"は、変数のアドレスを含むことができる変数で、 'int'のアドレスを含むことができます。最初の質問は「intをどこで見つけることができますか?」という質問に答えます。 2番目の質問は「どこで「int」を見つけることができますか」という質問に答えます。 – user4581301

+0

だから、intへのポインタは1次元の配列ではなく、ポインタへのポインタは2次元の配列ですか? –

+0

いいえ、あなたのコードがポインタを配列として扱うように書かれていれば、そのように使うことができます。その場合、各ポインタが保持するアドレスは配列の最初の要素として解釈されます。 –

答えて

2

ポインタは単なるメモリアドレスです。したがって、intへのポインタとは、その値がintのメモリアドレスである変数を意味し、intへのポインタへのポインタは、その値がintへのポインタのメモリアドレスである変数を意味し、そのポインタの値はintはintのメモリアドレスです。

たとえば、次のように3つの変数を定義します。

int a = 184; // Plain int, value 184. 
int *b = &a; // Pointer to int, specifically pointing to a. 
int **c = &b; // Pointer to pointer to int, which points to b, which points to a. 

ここでは、これらの変数がメモリ内でどのように見えるかについて説明します。 (唯一の値が実際にメモリに格納されていることに注意してください。タイプは、そのメモリを使用するコードから推測されます。)

 +------------+  +------------+  +------------+ 
type | int  |  | int*  |  | int**  | 
     +------------+  +------------+  +------------+ 
address | 0x02618368 |  | 0x02618372 |  | 0x02618376 | 
     +------------+ <--- +------------+ <--- +------------+ 
value | 184  |  | 0x02618368 |  | 0x02618372 | 
     +------------+  +------------+  +------------+ 

だから cのうち、int型を得るために、あなたは二回、それを間接参照する必要があります。最初の逸脱は cから値をとり、それをintへのポインタのアドレスとして解釈し、そのアドレスを参照してintへのポインタを取得します。これは bです。 2番目の逆参照は結果のポインタからintへの値をとり、それをintのアドレスとして解釈し、そのアドレスを参照してintを取得します。これは aに等しくなります。

+0

ええ、それは明らかではありませんでした。私は今それを修正しました。 –

関連する問題