守くんのC言語講座 第8回 − ポインタ編 −
「変数とアドレス」
いよいよC言語でも最難関と言われるポインタに突入だ。
@アドレスとアドレス演算子
プログラム上で変数を宣言すると、その領域はメモリ上に確保される。
アドレス メモリ
main() +----------------+
{ | |
int a; 1000 → +----------------+ 変数aの領域
double x; → | |
・・・・・ 1002 → +----------------+ 変数xの領域
} | |
scanf関数を思い出してみよう。scanf("%d",&a) ← aではなく&aになってい
る。これは、この関数がアドレスに指定された領域にデ−タを入力するしくみだ
からだ。&をアドレス演算子といい、変数や関数の前につけてアドレスを求める
演算子である。
Aポインタ変数
アドレスを格納するための変数をポインタ変数という。変数名の前に*(アスタリ
スク)をつけて、int *pa のように宣言する。
int a,*pa;
a=527;
pa=&a;
この様子を図で書くと、
+--------+
101f a | 527 | ←+
+--------+ |
+--------+ |
2002 pa | 101f | --+
+--------+
paには、aのアドレスが入る(決して527という値は入らない)。ポインタ変数を用
いて値(この場合527)を出すには実行文中で変数名の前に*をつけて参照する。
printf("pa : %d",*pa);
では、次に示すプログラムの実行結果を考えよう。
#include <stdio.h>
main(void)
{
int a,b,*pa;
a=1998;
pa=&a;
b=*pa;
printf("a: %d ,b: %d\n",a,b);
}