情報処理のWeb教科書―IPA情報処理試験対策のお供に!

C言語のポインタ―変数宣言から構造体ポインタまで解説。

トップ プログラミング C言語 C言語の構文 ポインタ

C言語のポインタについてまとめています。変数の宣言方法から構造体ポインタまで解説しています。

目次

この記事の目次です。

1. C言語のポインタとは

2. C言語のポインタの変数宣言

3. C言語の配列とポインタ

4. C言語の構造体とポインタ

もっと知識を広げるための参考

更新履歴

1. C言語のポインタとは

C言語のポインタとは、データのメモリの位置を保存して参照したり変更したりすることのできる変数です。 コンピュータのメモリにはアドレスがあり、そのアドレスを扱う変数をポインターといいます。

2. C言語のポインタの変数宣言

C言語のポインタの宣言方法について見ていきます。

ポインタ変数は、変数の場所(アドレス)を記憶する変数です。 ポインタ変数はまずはじめに変数のアドレスを代入して初期化しなければなりません。

ポインタ変数に変数のアドレスを代入してはじめて、ポインタの指すアドレスを見たり、そのアドレスの変数に記憶してある値を操作することができます。

ポインタ変数の初期化の例

ポインタ変数の初期化の例です。

int *p;      /*ポインタpの宣言*/
int n;       /*変数nを宣言*/
p = &n;      /*ポインタ変数pを変数nのアドレスで初期化*/
*p = 999;
printf("アドレス(%p)の変数の値は、%dである。\n", p,*p);

ポインタ変数の初期化の間違いの例

ポインタ変数の初期化の間違いの例です。 ポインタ変数に何もアドレスが記憶されていないのでそのアドレスの変数に値は代入できません。

int *p;      //ポインタpの宣言
*p = 999;
printf("アドレス(%p)の変数の値は、%dである。\n", p,*p);

サンプルプログラム1

//ファイル名:Sample1.c
#include <stdio.h>

int main(void) {
	int *p;      /*ポインタpの宣言*/
	int n;       /*変数nを宣言*/
	p = &n;      /*ポインタ変数pを変数nのアドレスで初期化*/
	*p = 999;
	printf("アドレス(%p)の変数の値は、%dである。\n", p,*p);
	return 0;
}

コンパイル

gcc Sample1.c

実行

作成したa.exeというファイルと同じディレクトリでSample1とコマンドラインに入力して、 「アドレス(16進数の数字)の変数の値は、999である。」と出力されます。

例)
>a.exe
アドレス(0012FF88)の変数の値は、999である。

サンプルプログラム2

//ファイル名:Sample2.c

#include <stdio.h>

int main(void) {
	// 変数nに9999を代入して表示
	int n = 9999;
	printf("変数nのアドレス(%p)の値は、%dである。\n", &n, n);

	// 変数pにnのアドレスを代入して表示
	int *p = &n;
	printf("変数pのアドレス(%p)の値は、%dである。\n", p, *p);

	// 変数p経由でnの値を変更して表示
	*p = 8888;
	printf("変数nのアドレス(%p)の値は、%dである。\n", &n, n);
	return 0;
}

コンパイル

gcc Sample2.c

実行

作成したa.exeというファイルと同じディレクトリでa.exeとコマンドラインに入力して、以下のように表示されます。

変数nのアドレス(16進数の数字)の値は、9999である。
変数pのアドレス(16進数の数字)の値は、9999である。
変数nのアドレス(16進数の数字)の値は、8888である。

3. C言語の配列とポインタ

ポインターに配列のアドレスを設定すれば、ポインターで配列が扱えます。 また、ポインターの配列を利用することで複数の文字列が扱えます。

#include <stdio.h>
void hello(char *str) {
        printf("Hello %s!!\n", str);
}
int main(void) {
        char *str = "World";
        hello(str);
        return 0;
}

コンパイルし、実行すると以下のように表示されます。

Windows)a.exe
Linux) ./a.out
Hello World!!

4. 構造体とポインター

C言語の構造体とポインターについてみていきます。

構造体

C言語には、複数のデータを一まとまりにする構造体という仕組みが用意されています。

structの直後に「タグ名」、構造体内の各データのことを「メンバ」と呼びます。 たとえば、次のように定義します。

struct Person {
    char* name;
    char* address;
}

構造体のデータを指し示すポインタ

構造体のメンバへのアクセスには、「.」、ドット演算子を使用しますが、構造体のデータを指し示すポインタについては、ドットではなくて、「->」、アロー演算子を使用します。

アロー演算子の利用例

struct Person *person;
person = malloc(sizeof(struct Person));
person->name = strdup("太郎");

もっと知識を広げるための参考

更新履歴

戻る

スポンサーリンク

情報処理の知識体系

プログラミング

各試験の問題と解説

ランダム出題・採点アプリ

スポンサーリンク