構造体ポインタ


構造体ポインタとは、「構造体変数を指すポインタ」のことです。構造体ポインタを使うときの宣言はstruct タグ名で型を指定して次のようにします。

struct タグ名 * ポインタ変数名

例えば、card型の構造体を指すポインタa1_ptrを宣言するときは次のようにします。

struct card * a1_ptr

a1_ptrはsruct card型の変数を指すポインタです。つまり、ポインタa1_ptrはstruct card型の構造体変数が格納されている記憶領域のアドレスを指し示します。「構造体ポインタ」と言っても、一般のポインタとたいして変わりません。int型の変数を指すポインタを宣言するとき「int * c_ptr」とするように、struct card型の構造体変数を指すポインタを宣言するのに、「struct card * a1_ptr」としただけのことです。
一般のポインタ同様、構造体ポインタも以下の要領で、初期設定してから使います。

a1_ptr &a1 (a1−ptrに構造体変数a1のアドレスを代入)


では、実際に構造体ポインタを使うプログラムを組んでみましょう。

struct card{
int
id;
char
name[20];
char
add[50];
char
tel[20];
int
age;
};
main(


struct card a1;
struct card * a1_ptr=&a1

a1.id=1;
a1.name=”山田
太郎”;
a1.add=”東京都新宿区神楽坂1−3”;
a1.tel=”00−0000−0000”
a1.age=20;

ptrntf(”ID番号:%d、%d¥n”,
a1.ida1_ptr−>id);
printf(”名前
%s、%s”¥n,a1.namea1_ptr−>name);
printf(”住所:
%s、%s¥n”,a1.adda1_ptr−>add);
printf(”電話番号:%s、%s¥n”,
a1.tela1_ptr−>tel);
printf(”年齢:%d、%d¥n”,
a1.agea1_ptr−>age
);
};

(実行結果)
ID番号:

名前:山田 太郎山田 太郎
住所:
東京都新宿区神楽坂1−3東京都新宿区神楽坂1−3
電話番号:
00−0000−000000−0000−0000
年齢:2020

上のプログラムでは、次のように、2つの方法で構造体メンバを参照しました。
printf(”ID番号:%d、%d”,
a1.ida1_ptr−>id);
実行結果を見ると、どちらも同じ値が出力されています。つまり、
「構造体変数.メンバ名」と「構造体ポインタ−>メンバ名」は同じものを指します。普段、構造体変数変数を参照するときには、「構造体変数.メンバ名」を使いましたが、構造体ポインタを使ってメンバを参照するときには「構造体ポインタ−>メンバ名」のように、「.」の代わりに、「−>」を用います。


「基礎講座もくじへ」

「Q&Aもくじへ」

「つぎへ」