#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です。