1. ポインタとは
ポインタとは、「変数のアドレスを記憶する変数」と定義することができます。
C言語の特徴にポインタが使用できることがあげられますが、ポインタからC言語がわからなくなったという話もよく耳にします。
しかし、順を追ってきちんと消化していけば、ポインタは難しいものではありません。読み飛ばさず、じっくりと理解するようにしてください。
2. 変数とポインタ
(1) 変数とアドレス
ポインタについて理解するには「アドレス」とは何かをまず理解してください。
int a = 123;
は実際には下図のように、 「メモリ上のある番地(下図では1000番地)に変数a としての領域を確保し、 その領域に 123 を格納する」ということになります。

この時、
- a : 変数a の値(123)を示す
- &a : 変数a のアドレス(1000)を示す
と表現します。
(2) ポインタは変数のアドレスを記憶する変数
ポインタとはアドレス変数、つまり変数のアドレスを記憶する変数のことです。

(3) ポインタの宣言と使い方(変数のアドレスを格納)
ポインタは必ず、
- 宣言
- 値(アドレス)の設定
- 使用
の 3ステップで用います。
ちょっと面倒ですが、下の使い方をよく見て、この 3ステップを確認してください。
間違いやすいのは「*」の使い方です。 各ステップで「*」がどのように使われているかよく注意してください。


// ポインタの使用例
#include <stdio.h>
int main(void)
{
int a, b;
int *p; // ポインタの宣言
p = &a; // ポインタに変数のアドレスを設定
*p = 100; // ポインタを使ったデータのアクセス
b = *p + 1;
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("*p = %d\n", *p);
return 0;
}
【実行結果例】
a = 100
b = 101
*p = 100
〇 演習
問1
空欄部を埋めて「ポインタが指している値を表示するプログラム」を完成しなさい。
#include <stdio.h>
int main(void)
{
char c;
______; // ポインタの宣言
c = 'A';
p = _______; // ポインタの値設定
printf("%c\n", _______); // ポインタの指す値を表示
return 0;
}
【実行結果例】
A
問2
空欄部を埋めて「ポインタが指している中身を+2するプログラム」を完成しなさい。
#include <stdio.h>
int main(void)
{
char c = 'A';
___________; // ポインタの宣言とアドレスの初期化
printf("%c\n", _______); // ポインタの指す値を表示
_______; // ポインタの指す値を+2
printf("%c\n", _______); // ポインタの指す値を表示
return 0;
}
【実行結果例】
A
C
問3
空欄部を埋めて「変数のアドレス、値、ポインタ、ポインタの指す値を表示するプログラム」を完成しなさい。
#include <stdio.h>
int main(void)
{
int a = 611, *ptr;
ptr = &a; // ポインタの値設定
printf("変数 a のアドレス = %p\n", _______);
printf("変数 a の値 = %d\n",_______);
printf("ポインタ ptr の値 = %p\n",_______);
printf("ポインタ ptr の指す値 = %d\n",_______);
return 0;
}
// %pはアドレスを表示するための変換指定
【実行結果例】
変数 a のアドレス = 00000048D2DFF8A4
変数 a の値 = 611
ポインタ ptr の値 = 00000048D2DFF8A4
ポインタ ptr の指す値 = 611
※赤文字部分は環境によって異なります。
解答例
// 問1
#include <stdio.h>
int main(void)
{
char c;
char *p; // ポインタの宣言
c = 'A';
p = &c; // ポインタの値設定
printf("%c\n", *p); // ポインタの指す値を表示
return 0;
}
// 問2
#include <stdio.h>
int main(void)
{
char c = 'A';
char *p = &c; // ポインタの宣言とアドレスの初期化
printf("%c\n", *p); // ポインタの指す値を表示
*p += 2; // ポインタの指す値を+2
printf("%c\n", *p); // ポインタの指す値を表示
return 0;
}
// 問3
#include <stdio.h>
int main(void)
{
int a = 611, *ptr;
ptr = &a; // ポインタの値設定
printf("変数 a のアドレス = %p\n", &a);
printf("変数 a の値 = %d\n",a);
printf("ポインタ ptr の値 = %p\n",ptr);
printf("ポインタ ptr の指す値 = %d\n",*ptr);
return 0;
}
コメント