(C言語)2重ポインタについて
2重ポインタについて少しですがわかりやすくまとめて置きます。
そもそもポインタとは、
変数を定義したときに変数はアドレスというものを持っていて、その別名として変数名があるような形になっています。 このアドレスをつかさどるのがポインタです。
ポインタを使うことで変数をアドレスとして使うことができます。
ここで変数名で使えばいいやんと思うかもしれないが、c言語には文字列という概念が備わっていないので、アドレスを活用して文字列を使います。
1重のポインタ
書き方
int a=10; int\* p; //int \*pでも大丈夫 p=&a; //&は後ろの変数のアドレスを読み取るものです。 printf("%d\n",\*p);// \*はアドレス値から値を読み取ります。
詳しく日本語で説明
- 整数aの値を10とする。(10は値であってアドレスではないです。)
- 整数ポインタ変数pを宣言する。(ポインタ変数にもcharの型etc..があります。)
- 整数ポインタ変数pにaのアドレス値を代入します。
- 整数ポインタ変数pに入っている数値(アドレス)の値を出力します。
これは1重のポインタです。
- *(宣言時)・・・ポインタ変数ですよって意味
- &・・・変数からアドレスと読み取る
- * ・・・アドレスから変数(の値)を読み取る
(アドレス値は適当です。)
&と*は対義語みたいなものです。
2重ポインタ
書き方
int a=10; int\* p; int\* pp; p=&a; //&は後ろの変数のアドレスを読み取るものです。 pp=&p printf("%d\n",\*\*pp);// \*はアドレス値から値を読み取ります。
詳しく日本語で説明
- 整数aの値を10とする。
- 整数ポインタ変数pを宣言する。
- 整数ポインタ変数ppを宣言する。<-違うところ
- 整数ポインタ変数pにaのアドレス値を代入します。
- 整数ポインタ変数ppにpのアドレス値を代入します。
- 整数ポインタ変数ppに入っている数値(アドレス)の値を出力します。
(アドレス値は適当です。)
最後なんて**となっていて*が2つもあります。
この*の数で何重ポインタと言っているのです。
↓↓こんな感じです。。↓↓
まとめ
- *と&は対義語
- わからなくなったら一つ一つ置換(代入するとわかりやすい)