見出し画像

【C言語】ポインタのことを説明してみましょう


コンピュータにはメモリが必要です。メモリにデータを格納し演算することで、様々な動作を実現します。

メモリにはアドレスが割り振られています。
こんな感じ。

例えば、プログラムで

char x = 13;

と書くと、空いているメモリから1バイト確保して割り当てます。

「x」はメモリの中の値で、
「&x」はそのアドレスです。


C言語にはさらに、ポインタ変数というものがあります。
「char」型のポインタの場合

char*

と書きます。

char* px = &x;

と書くと、空いているメモリから32bitを確保して割り当てます。
例えばこんな風に。

「x」と「px」の間をあけたことにあまり意味はないんだけど、昨今のCPUは4で割りきれないアドレスに4バイトのデータを割り当てることはあまりありません。

「x」と「px」は次のような感じになります。

「px」には「&x」を設定したので、これらは同じ値ですね。


もう一つ、「*px」はここを指します。

「x」も「*px」も、同じメモリを指し、同じ値となります。

x = 14;

などとすれば

となるわけですが、「*px」も同じメモリを指しているので、当然のことながら「*px」も「14」になります。
どんなデータもメモリに格納され、メモリはアドレスで区別されるわけですが、ポインタ変数というのはその「アドレスを格納するための領域」ということです。

もちろん、

*px = 15;

と書けば

x = 15

となります。
では、

px = (char*)0x075BCD17;

と書くとどうなるでしょう。
「*px」も移動します。

*px = 56;

とすると、ここが変化します。

「px」はどんな値にでもできます。
ということは、「*px」はどこでもアクセスできるわけです。

アドレス「0x00000000」の中を変更することもできるし、
アドレス「0xFFFFFFFF」の中を変更することもできます。

ポインタがコワイと言われる所以ですね。


さて。

では、この「ポインタ変数」。
いったい何に使うのでしょうか。

それは・・・・。

また次回。


この記事が気に入ったらサポートをしてみませんか?