【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」の中を変更することもできます。
ポインタがコワイと言われる所以ですね。
さて。
では、この「ポインタ変数」。
いったい何に使うのでしょうか。
それは・・・・。
また次回。
この記事が気に入ったらサポートをしてみませんか?