守くんの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);
}