ポインタの基本


変数のアドレスを求めることができるようになりました。このアドレスを変数に代入することはできないのでしょうか。アドレスも単なる整数値なので、変数に代入できそうですね。実は、アドレスを格納するための変数がポインタなのです。

ポインタを使うためには、一般の変数と同じようにブロックの最初に宣言する必要があります。int 型の変数のアドレスを格納するポインタを pi とすると

int *pi;

というように宣言します。この場合、pi は「int 型へのポインタ」となります。

double 型の変数のアドレスを格納するポインタを pd とすると

double *pd;

というように宣言します。この時 pd は「double 型へのポインタ」となります。ポインタ型を宣言するとき「*」のことをポインタ宣言子(pointer declarator)といいます。

さて、

int a;

int *pa;

pa = &a;

とすると、変数 a のアドレスが pa に代入されました。この時「ポインタ pa は変数 a を指している」とか「変数 a へのポインタ pa」などと表現します。

int a, b;

int *pa;

a = 5;

pa = &a;

b = *pa;

このとき「*pa」は変数 a の値を表しています。「*」のことを間接参照演算子(indirection reference operator)といいます。

ソースコード

源文件
  1|/* pointer01.c */
  2|
  3|#include <stdio.h>
  4|
  5|int main(void)
  6|{
  7|  int a;
  8|  int *lpa;
  9|  lpa = &a;
 10|
 11|  printf("適当な整数をインプットして下さい----");
 12|  scanf("%d", &a);
 13|  printf("変数aに%dが代入されました。\n", a);
 14|  printf("変数aのアドレスは%pです。\n", &a);
 15|  printf("変数aを指しているポインタはlpaです\n");
 16|  printf("lpaの値は%dです\n", *lpa);
 17|
 18|  return 0;                                                                 
 19|}

実行結果

適当な整数をインプットして下さい----5
変数aに5が代入されました。
変数aのアドレスは0x7fff5fbff5fcです。
変数aを指しているポインタはlpaです
lpaの値は5です


scanf 関数を使う時、変数名に & をつけて、scanf 関数に変数のアドレスを教えていたのです。

ポインタとは、変数のアドレスを格納するための変数である。

Chapte6 @ C言語目録 @ HomeWork List @ 昭亮's Homepage