#ポインタのおはなし
C言語を勉強する中でポインタで挫折するとよく言われています。
でも意外と簡単です。
#ポインタとは
ポインタは、メモリのアドレスを格納する変数のことです。
アドレスは大抵の場合16進数で表示されるはずです。(16進数じゃないケースもあります)
アドレスしかいれることはできません。
#ポインタ変数の宣言と初期化
##宣言方法
ポインタ変数は次のように宣言します。
int *pHoge;
アスタリスクをつけるだけで簡単にポインタ変数を宣言できちゃいます。
pHoge
の部分には自分の好きな人の名前を入れてもOKです。
##ポインタ変数の初期化
ポインタ変数の初期化では変数のアドレスを代入します。
初期化の仕方はscanfの使い方と少し似ているので親しみが持ちやすいとおもいます。
int hoge;
int *fuga=&hoge;
&hoge
というふうに &+変数名の形式で入力すると変数のアドレスを代入することができます。
#参照の方法
ポインタ変数の中に入っているアドレスの変数を知りたいときはアスタリスクをつけます。
「○○区 ○○○○ ○○マンション102」が入っているポインタ変数に*をつけると住んでいる人の名前が出てくるといったような感じです。
int hoge;
int *fuga=&hoge;
printf("%d",*fuga);
//同じ意味↑↓
printf("%d",hoge);
printf関数で表示している部分は同じです。
*をつけるとポインタ変数の実体が帰ってきます。
#配列とポインタの話
例えば
int hoge[5];
int *p_hoge=&hoge[0];
for(int i=0;i<5;i++){ //配列hogeの初期化のループ
*p_hoge=0; //アドレスの実体(hoge[0])の値に0を代入
p_hoge++; //"アドレス"をインクリメント
}
2行目: int p_hoge=&hoge[0]
では配列hogeの先頭hoge[0]
のアドレスが代入されます。
5行目:*p_hoge=0;
でアドレスの実体(hoge[0]
)に代入しています。
6行目:配列のアドレスは続いてるため、アドレスをインクリメントするとhoge[1]
のアドレスになります。
#むすび
実行結果は今度貼っておきます。
今度は、ポインタ変数を使った、引数のアドレス渡しについて書きたいと思います。