こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

構造体変数がないとメンバ操作できないのはなぜ?

C言語の構造体に関して質問がありますが、structで型を作成して、構造体変数にてメンバの代入・参照をする。ということなんですが、なんでメンバ操作には構造体変数からでないといけないのでしょうか?

直接、型枠にてメンバ操作をすれば良いのに、なぜ構造体変数から操作しないといけないのでしょうか?

「クラス」や「オブジェクト」みたいに、一々ゼロから作成したり、コピペで作成しなくても済むように、このような形になっているのでしょうか?

回答の方よろしくお願いします。

投稿日時 - 2019-09-30 00:23:07

QNo.9662061

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

あ、すいません。昨日のコメント、
酒飲んでて覚えてなかったので。スルー頼ます。

投稿日時 - 2019-09-30 11:29:01

例えば、そのstructで2個の構造体変数を作ったとします。
どっちを今から書き換える?と区別するにはどうしますか?
根元がないと、今から触る構造体を区別できないのでは?
というイメージはいかがでしょうか?

[class_AAA.h]
struct AAA {
int a;
int (*get)(struct AAA *);
vod (*set)(struct AAA *,int new_a);
};
struct AAA *create_new_AAA(void);

これを構造体として、

[class_AAA.c]
static int _get(struct AAA *this) {
return(this->a);
}
static void _set(struct AAA *this,int new_a) {
this->a=new_a;
}
struct AAA *create_new_AAA(void) {
struct AAA *n=(struct AAA *)malloc(sizeof(struct AAA));
n->a=0;
n->get=_get;
n->set=_set;
return(n);
}
とでも初期化したとして、

使用時・・・例えば
struct AAA *a,*b;
a=create_new_AAA();
b=create_new_AAA();
a->set(a,50);
b->set(b,a->get()); 結局どっちがどっちか?を表すには、元の変数が必要でしょ。。

ってな・・・

投稿日時 - 2019-09-30 01:12:30

あなたにオススメの質問