おとついの晩ご飯

忘れやすいので忘れたくないことを書いています。

【C++】ポインタについて

問題

ポインタという言葉は知っているし、アドレスという言葉もしっているが、やっぱりポインタで悩んだ部分があったので、自分なりの理解をまとめておく。


自分なりの理解

書き方

// int型の変数
int a =10;

// int型のポインタ
int *p_a;

// int型ポインタに代入(aのアドレスが入っている)
p_a = &a;

// アドレスの先にある値(10)を取得
int b = *p_a

上記を実行すると、ポインタ変数のp_aにint型変数aのアドレスが入っているのがわかる。


なぜポインタを使うか

  • 離れたところへも変数の値を渡すことができる
    1つのクラス内で、変数や引数を用いて値のやり取りをする分にはどうしてもポインタが必要になるような場面は少ないのかもしれないが、EXEで定義されている変数の値をDLLに渡してDLLでその値をを変更してからEXEで使うようなことが必要な場合は、とても役に立つ。

  • たくさんの値をまとめて渡せる たくさんの引数を渡さないといけないようなことがあったときに、それらの値を構造体として一つにまとめて渡す方法を考えると思う。しかし、構造体を引数にして渡すと渡した先では構造体の値がコピーされたものが渡されており、そこで構造体内の値を変更しても渡し元には変更されていない元の値のままとなる。そういった場合にポインタを使うと、渡した先での変更が呼び出し元でも反映される。

構造体やクラスのポインタを渡した場合には、以下のようにアローを使って、構造体やクラス内部の値にアクセスする。

// ポインタから構造体の中の値を取得
auto val = p_struct->InnerValue;


ちなみに

ポインタの書き方が人によって様々なようで、それによってなにか別の意味があるのではと思ってしまうことがありましたが、書き方が違うだけでポインタを表すことに違いはないみたいです。
統一して。。。

int* p_int;
int * p_int;
int *p_int;