第5回

変数とポインタ

00/06/23 因みに・・・を追加
98/11/06 IE4.xに対応させた
98/04/29メールアドレス訂正
98/03/21一部訂正

前回は、変数とは一体何であるのかということと、何かの値を記憶する場所は、あくまでメモリ上のどこかのアドレスだ(変数そのものでは無い)ということ。そして、そのアドレスをもろに指し示すポインタというものが存在するということを長々と説明しました。って、また長々と説明しそうな雰囲気が漂ってきたな。(^_^;
今回は、実際にC言語のプログラムを使って、そのことを確かめてみることにします。ただし、まだ変数の型というものすら学んでいない状態であり、ちょっと解り辛いものがあると思います。今回はとりあえず、あまり深く考え過ぎないで下さい。あ。でも、C言語をこの先も学んでいくかどうかについては、深く考えた方がいいと思います。(^_^;

#include<stdio.h> 
main(){
    int a=15;
    int *b;
    printf("変数aの値=%d\n",a);
    printf("変数aの値の記憶場所=アドレス%x\n",&a);
    b=&a;
    printf("ポインタbは、変数aの記憶場所(アドレス%x)を指し示す\n",b);
    printf("確認:そのアドレスに記録されている値=%d\n",*b);
    *b=20;         /*    そのアドレスに記憶されている値を20にする    */
    printf("そのアドレスに20を代入した。\n変数aの値=%d\n",a);
}                                                                 
実行結果

変数aの値=15
変数aの値の記憶場所=アドレスfe8
ポインタbは、変数aの記憶場所(アドレスfe8)を指し示す
確認:そのアドレスに記録されている値=15
そのアドレスに20を代入した。
変数aの値=20
通常、変数aの値を20に変える場合、すぐに思い付くのが、a=20;みたいに、直接変数aに20を代入するやり方です。もっともBASICには、その方法しか存在しません。
今回のプログラムでは、変数aに割り当てられたアドレス(を指し示すポインタbの値)に20を代入することで、変数aの値を20に変えています。軽く説明します。

(3行目)int型(整数型)変数aを宣言すると共に、15を代入する。
(4行目)int型変数のポインタbを宣言する。
(5行目)int型変数aの値を表示する。
(6行目)int型変数aに割り当てられている記憶場所(アドレス=&a)を(16進数で)表示する。
(7行目)で、そのアドレス(=&a)を、int型変数のポインタbが指し示すようにする。
(8行目)実際int型変数のポインタbが指し示しているアドレスを表示してみる。
(9行目)ついでに、そのアドレスに格納されている値も表示してみる(確認の意味で)。
(10行目)そのアドレスに記憶されている値を20にする。あ、コメントの通りだ。(^_^;
(11行目)int型変数aの値を表示する。

この時点で、まだ笑みを浮かべていられる(苦笑じゃない)のなら、C言語プログラマになれる見込みは十分あると思います(って、ずけェ偉そう>いーざ)。
逆に、諦らめムードが漂ってきたのなら、とっとと諦らめて、Visual Basicにでも走った方が身の為です。だってこの後、関数へのポインタとか、構造体へのポインタ、ポインタへのポインタ、汎用データポインタ(void *型)、ポインタのアドレス計算等といった具合に、ポインタの嵐と化します。しかもどれも重要。(^_^;
それと、BASICでいとも簡単に使える文字列型も、C言語では文字型のポインタ(char *)です。(^_^;;

挫折するどころか、ますます面白くなってきたって方は第6回へ。:-)

因みに、サンプルプログラムのアドレスを出力するところで、16進数で出力する変換文字%xを使っていますが、アドレスを出力する変換文字は%pです。


[メニュー][第4回][第6回]

いーざ
email:CQP00202@nifty.ne.jp