C_ポインタとは

C の書き方は全くもって不明。C ++ を理解するためにまとめた。

 

メモリアドレス指し示すもの
言い方を変えると
・変数の値が格納されている場所を示す、変数のこと。
・プログラムからメモリへ自在にアクセスするためのもの。

C ++ では、「参照」という。
参照:その変数を参照する ( =変数の値を操作したりできる ) 権限。

 


アドレスではなく正しくはポインタ、という件が所々あるが、
アドレスと記述しておく。

 

ex )

a = "Hello";
と書いた場合、
アドレス 9999 Hello が格納。

 

b = &a;
と書いた場合、
b に a のアドレス「9999」 が格納。

f:id:koshinRan:20170718024328j:plain

b が a のポインタ
訳すと
b は a の " Hello " が入っている場所を指し示している

 

c = *b
と書いた場合、
" Hello " が c に格納される。

[ * ] + [ ポインタ ]
で、アドレスに格納されている値を取り出せる

 

 

アドレス演算子    &

& を変数の前につけると、そのアドレスを取り出すことが出来る。
※ 正しくは、アドレスをポインタという形で得ることが出来る。

 

& a
で、a のアドレスを取り出すことができる。
ソースを読むときは、
& a =「 a のアドレス 」

 

間接参照演算子    *

*ポインタ値の前につけると、
そのポインタが指す変数そのものを参照することができる。
(= アドレスに格納されている内容を取り出せる。)

変数そのものでなく、ポインタ値を介して参照するので、
間接参照と呼ばれる。

 

* ( & a )
で、変数 a のアドレスに格納されている内容を取り出せる。

* b
で、b にもアドレスが格納されているから "Hello" が取り出せる。

 

 

上記を踏まえると、

b = & a
b に a のアドレスが格納。 → 9999

a = * ( &a )
a と  * ( &a ) は同じ値。 → Hello

a = *b
a と * b は同じ値。 →Hello

*b を変数 a の分身として扱うことができる。

 

こちらから。
http://www.cc.kyoto-su.ac.jp/~yamada/programming/pointer.html
http://ohmoriws1.ms.kagu.tus.ac.jp/1997/sotsuken/miyakosi/a01.html
http://flute.u-shizuoka-ken.ac.jp/~s-okubo/class/language/004.htm
https://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
http://www.isc.meiji.ac.jp/~re00079/EX2.2011/20110518.html

 

以上。

---Memo---

int a = 1;
int * x = &a;

&a は ポインタ。
xポインタ型変数 (ポインタ値を格納する変数)。