(C言語)2重ポインタについて

 2重ポインタについて少しですがわかりやすくまとめて置きます。

そもそもポインタとは、

変数を定義したときに変数はアドレスというものを持っていて、その別名として変数名があるような形になっています。 このアドレスをつかさどるのがポインタです。

ポインタを使うことで変数をアドレスとして使うことができます。

ここで変数名で使えばいいやんと思うかもしれないが、c言語には文字列という概念が備わっていないので、アドレスを活用して文字列を使います。

1重のポインタ

書き方

int a=10;
int\* p; //int \*pでも大丈夫
p=&a; //&は後ろの変数のアドレスを読み取るものです。
printf("%d\n",\*p);// \*はアドレス値から値を読み取ります。

詳しく日本語で説明

  1. 整数aの値を10とする。(10は値であってアドレスではないです。)
  2. 整数ポインタ変数pを宣言する。(ポインタ変数にもcharの型etc..があります。)
  3. 整数ポインタ変数pにaのアドレス値を代入します。
  4. 整数ポインタ変数pに入っている数値(アドレス)の値を出力します。

これは1重のポインタです。

  • *(宣言時)・・・ポインタ変数ですよって意味
  • &・・・変数からアドレスと読み取る
  • * ・・・アドレスから変数(の値)を読み取る

(アドレス値は適当です。)

&と*は対義語みたいなものです。

2重ポインタ

書き方

int a=10;
int\* p; 
int\* pp; 
p=&a; //&は後ろの変数のアドレスを読み取るものです。
pp=&p
printf("%d\n",\*\*pp);// \*はアドレス値から値を読み取ります。

詳しく日本語で説明

  1. 整数aの値を10とする。
  2. 整数ポインタ変数pを宣言する。
  3. 整数ポインタ変数ppを宣言する。<-違うところ
  4. 整数ポインタ変数pにaのアドレス値を代入します。
  5. 整数ポインタ変数ppにpのアドレス値を代入します。
  6. 整数ポインタ変数ppに入っている数値(アドレス)の値を出力します。

(アドレス値は適当です。)

最後なんて**となっていて*が2つもあります。

この*の数で何重ポインタと言っているのです。

↓↓こんな感じです。。↓↓

まとめ

  • *&は対義語
  • わからなくなったら一つ一つ置換(代入するとわかりやすい)