OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

基本的な領域確保の仕方について

  • すぐに回答を!
  • 質問No.182993
  • 閲覧数57
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 12% (35/274)

下記のような構造体が宣言されている場合、

A.c.e ←を配列扱いにし、
A.c.e[0].g.h ←を配列扱いにし、
A.c.e[0].g.h[0].iにデータを設定するには、
どのように領域を確保すれば良いのでしょうか?
eee型はポインタ宣言のみされていて配列宣言されて
いません。(Max10配列)

typedef struct
{
int len;
char *i;
}
hhh;

typedef struct
{
int number;
hhh *h;
}
ggg;

typedef struct
{
fff f;
ggg g;
} eee;

typedef struct
{
int number;
eee *e;
} ccc;

typedef union
{
aaa a;
bbb b;
ccc c;
ddd d;
} A;
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

領域の確保には malloc() を使う、ってことは OK でしょうか?

ccc の e、ggg の h、hhh の i をそれぞれ 10 個取るとしましょう。
sting さんは、分かっているようですが、入れ物を先に確保して、それから
その内容を確保するを繰返すだけです。

ccc の e を確保して、ggg の h を確保するのは、以下のような感じ。

#define MAX_SIZE 10

int i;
A a;

a.c.e = malloc(sizeof(eee) * MAX_SIZE);
for (i = 0 ; i < MAX_SIZE ; ++i) {
  a.c.e[i].g.h = malloc(sizeof(hhh) * MAX_SIZE);
}


分かります?

更に、hhh の i を確保するのは、これの繰返しになります。

a.c.e = malloc(sizeof(eee) * MAX_SIZE);
for (i = 0 ; i < MAX_SIZE ; ++i) {
  a.c.e[i].g.h = malloc(sizeof(hhh) * MAX_SIZE);
  for (j = 0 ; j < MAX_SIZE ; ++j) {
    a.c.e[i].g.h[j].i = malloc(sizeof(char) * MAX_SIZE);
  }
}
-PR-
-PR-
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ