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

ポインタを使ってメンバに値を入力して表示するプログラムを作ったのですが、mainのstruct XYZ aというオブジェクトと*bというそれを指すポインタを使ってプログラムを表示するにはどうすればいいのでしょうか。
これがプログラムです。

#include <stdio.h>
struct XYZ {
int x;
long int y;
double z;
};

void set_xyz(struct XYZ *p,int x,long int y,double z) {
p->x=x;
p->y=y;
p->z=z;
}

//void set_xyz(struct XYZ *,int,long int,double);

int main() {
struct XYZ a = {12,999999,1.41421356},*b; //ここのポインタ変数bでエラーが表示されます。
set_xyz(b,a.x,a.y,a.z);
printf("a.x = %d\na.y = %d\na.z = %lf\n",b->x,b->y,b->z);
return 0;
}

エラーの内容は「初期化されていないローカル変数 'b' が使用されます」となっています。
初歩的な質問ですみません・・・。

A 回答 (4件)

>エラーの内容は「初期化されていないローカル変数 'b' が使用されます」となっています。


 b = &a;
とか、
 struct XYZ c;
 b = &c;
で、ポインタ変数bを初期化(bを struct XYZ のデータのどれかを指す)すれば、いいだけではないですか?

解説
struct XYZ a = {12,999999,1.41421356},*b;
は、
 struct XYZのデータ a と
 struct XYZのデータを指すポインタ変数 b
を定義しています。
 aの中身は  {12,999999,1.41421356} です
 bの中身はゴミ(何を指しているか不明)です

 b = &a;
ポインタ変数 b はstruct XYZのデータ a を指します
 struct XYZ c;
 b = &c;
struct XYZのデータ c を定義し、
cの中身はゴミですが、
ポインタ変数 b はstruct XYZのデータ c を指します

この直後に
 set_xyz(b,a.x,a.y,a.z);
を実行すれば、ポインタ変数 b の指すstruct XYZのデータ(今回はaやc)
に a.x,a.y,a.z の3つのデータが書き込まれます。
    • good
    • 0
この回答へのお礼

なるほど、エラーで出た初期化とはそういうことだったんですね。
うっかりしていました。
ありがとうございます。スッキリしました。

お礼日時:2014/07/05 12:38

bはポインタなので、変数を入れる場所がありません。



bをポインタではない宣言して、set_xyzに渡すときポインタで渡せばいい。
    • good
    • 0
この回答へのお礼

そうすると、そもそもaだけでプログラムが完成できますね…。
b余計でした。すみません。
回答有難うございます。

お礼日時:2014/07/03 22:46

>set_xyz(b,a.x,a.y,a.z);



この時、bはどこを差しているんでしょう?

>struct XYZ a = {12,999999,1.41421356},*b;

こう記述したら、bがaを差している。という認識でしょうか?
    • good
    • 0
この回答へのお礼

そういう認識ですね。
bというポインタを作って、それを差せば値が代入できるのでは、と考えた次第です。
ですが、bのどこに入れるかと言われてやっとわかりました。
ありがとうございます。

お礼日時:2014/07/03 22:45

初期化すればいい.

    • good
    • 0
この回答へのお礼

初期化はしてみたましたが更にエラーが増えただけでした。
回答有難うございます。

お礼日時:2014/07/03 22:43

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