dポイントプレゼントキャンペーン実施中!

#include <stdio.h>

struct data {//構造体
int x;//メンバ1
int y;//メンバ2
int *z;//ポイント型メンバ1
};

int main(void){
struct data d;//構造体宣言
struct data *pd;//ポインタ型構造体宣言
int a;//int型宣言

a= 3;//aに3を代入

d.x = 1;//構造体dのxに1を代入
d.y = 2;//構造体dのyに2を代入
d.z = &a;//構造体dのint型ポインタ変数zに3を代入

pd = &d;//ポインタ型構造体pdに構造体dを代入

printf("d.x = %d\n", (*pd).x);//1
printf("d.y = %d\n", (*pd).y);//2
printf("*(d.z) = %d\n", *((*pd).z));//3

return 0;
}

//の後に自分で解説を付け加えたのですが、合っているかわかりません。修正して解説していただけませんか?よろしくお願いします

A 回答 (3件)

>ポインタ型構造体宣言


構造体へのポインタ型の変数pdの宣言

#ポインタ型構造体では意味不明だ。

>構造体dのint型ポインタ変数zに3を代入
構造体のメンバd.zが変数aを指すようにする。

#ポインタ型に整数は代入できない。
#代入されるのはポインタ値(アドレス、参照)

>ポインタ型構造体pdに構造体dを代入
pdが構造体dを指すようにする。

#これも構造体の代入ではない。
    • good
    • 0

int *z;//ポイント型メンバ1



int *z;//イント(またはインテジャー)型メンバ3のポインタ宣言
のほうがわかりやすいと思います。

struct data *pd;//ポインタ型構造体宣言

struct data *pd;//構造体のポインタ宣言
のほうがわかりやすいと思います。

「ポインタ型」と言う表現はしばしばしますが、実態は、Int型へのポインタ型、String型へのポイント型と言ったように他の型と合わせて作られます。なんらかの型の変数のアドレスを示すもので、派生型ともいいます。
    • good
    • 0

「ちょっと変」くらいのものは許容するとして、間違っている部分だけ書くと、


ポインタ型構造体宣言 ⇒ 構造体へのポインター宣言
構造体dのint型ポインタ変数zに3を代入 ⇒ 構造体dのint型へのポインタ変数zにint型変数のアドレスを代入
ポインタ型構造体pdに構造体dを代入 ⇒ 構造体へのポインター変数pdに構造体dのアドレスを代入
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!