アプリ版:「スタンプのみでお礼する」機能のリリースについて

構造体の中にvoid*型のポインタを作り、そこの中身を替えることでデータを変えたいと思っています。


struct DATA{
void* p;
}

struct PROF_1{
char* name;
int age;
}

struct PROF_2{
char* name;
int age;
int level;
}


void main(){
struct DATA data;
struct PROF_1 p1={"HATOYAMA", 60};
struct PROF_2 p2={"OBAMA", 60, 1};

data.p = p1;
printf("Name[%s] Age[%d]\n", (PROF_1)(data.p)->name, (PROF_1)(data.p)->age);

data.p = p2;
printf"Name[%s] Age[%d] Lv[%d]\n", (PROF_2)(data.p)->name, (PROF_2)(data.p)->age, (PROF_2)(data.p)->level);
}

このような感じで構造体の中にあるvoid*型のポインタの参照する場所を変えるだけで構造体の中身を変化させることが出来ないでしょうか?

A 回答 (2件)

>void*型のポインタの参照する場所を変えるだけで構造体の中身を変化させることが出来ないでしょうか?


できます。
使用する型がわかっているのであればunionで定義する方法もありますが。
struct DATA{
 int type;  // 入れている型
 union
 {
  struct PROF_1 data1;
  struct PROF_2 data2;
 }packet;  // 供用の定義
}
とか。
もちろんポインタも使用できます。
    • good
    • 0
この回答へのお礼

なるほど、共用体を使えばいいのですね。
ありがとうございます。

お礼日時:2010/02/03 10:48

もちろんできます.


ただし, 「現在入っているのはどの型なのか」をきちんと意識する必要はあります.
    • good
    • 0
この回答へのお礼

楽をするにはどこかで苦労する必要があるのですね。

お礼日時:2010/02/03 10:47

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