• ベストアンサー

動的に作成した構造体配列の中に、さらに動的に構造体配列を作るには?

noname#7273の回答

noname#7273
noname#7273
回答No.1

構造体'a'の中で配列bを直接指定せずにポインタ型で指定し、 構造体'b'の宣言は構造体'a'の外に出し、別立てにしたらいかがですか。 つまり、a[0]の次にb[0],b[1],...,b[a[0]],を配置し、 その次にa[1]をメモリ配置しようとしても位置が決まらないわけですから。

関連するQ&A

  • qsortを用いた構造体配列のソート

    お世話になります。 http://simd.jugem.jp/?eid=116 を参考にqsortを用いた構造体配列のソートをC言語で記述しようとしています。 上記のページは、構造体のメンバが配列でない場合です 今回は、メンバが配列のときの構造体配列のソートを実現したいと思っています。 つまり、 typedef struct{ int a; int b[1024]; int c[1024]; }TEST; という構造体配列があって、 TEST base[256]; と宣言し、メンバの配列の添え字を基準としてソートしたいときには、どのようにqsortを用いれば良いのでしょうか、ということです。 どうしたらよいかわからず途方にくれています。 つまり、下のようなソートが行われるには、どのようなプログラムを書けばいいかということです。 構造体でソートするものとします。 構造体でソートできれば、qsortを使っていなくても構いません。 プログラムの得意な方がおりましたら、ご教授下さい。 <ソート前> //************************************************ test[ 0].b[0] = 3; test[ 1].b[0] = 102; ... test[255].b[0] = 1; ------------ test[ 0].b[1] = 99; test[ 1].b[1] = 200; ... test[255].b[1] = 2; ------------ ... ------------ test[ 0].b[1023] = 99; test[ 1].b[1023] = 9; ... test[255].b[1023] = 200; //************************************************** <ソート後>:test[x]ではなく、b[y]を基準としてそれぞれのくくりをソートしたい //************************************************ test[ 0].b[0] = 1; test[ 1].b[0] = 3; ... test[255].b[0] = 102; ------------ test[ 0].b[1] = 2; test[ 1].b[1] = 99; ... test[255].b[1] = 200; ------------ ... ------------ test[ 0].b[1023] = 9; test[ 1].b[1023] = 99; ... test[255].b[1023] = 200; **************************************************

  • データ数の多い構造体配列について

    visual c++で配列をメンバーに持つ構造体配列を定義したいと思っています。 しかし、以下のように定義してもプログラムが実行されません。 配列の容量が大きいのかもしれませんが、 大量のデータを扱いたいので容量を小さくはしたくありません。 大量のデータを扱うのに何かいい方法はないでしょうか。 struct X { double A[1000]; }; : : : struct X B[10000];

  • 配列を含んだ構造体への値設定について教えて下さい。

    配列を含んだ構造体への値設定について教えて下さい。 下記のような構造体の定義があります。 typedef struct A_T { UINT64 a1; UINT32 a2; } A_t; typedef struct B_T { UINT32 b1; A_t b[8]; } B_t; 構造体B_tを関数の引数で渡し、A_tのa1とa2に値を設定したいのですが、プログラミング初心者の為、どのように作ればよいのかわかりません。 どうぞ教えて下さい。

  • C言語 構造体配列について

    6人分の小テストの点数を記録し,平均値などを計算するプログラムを作成している. 以下の手順と条件に従ってプログラムを作成. 手順 (1) 氏名(name[100], char 型) と点数( score , int 型) をメンバにもつ構造体「struct_TEST」を(main 関数の外で)定義. (2) struct _TEST 型構造体配列 element[6] を定義. (3) キーボードから氏名(ローマ字でよい)と点数を入力する処理を6 回繰り返す. (4) 平均点を計算して画面表示. (5) 最高点を出した人の名前と点数を画面表示. (6) 平均点に満たない人の名前と点数を画面表示. 条件 (3)~(6)の処理には以下に示す関数を利用する. (3) ・・・ 氏名と点数を入力する処理をn 回繰り返す関数 void input_score( struct _TEST *a, int n ) (4) ・・・ n 個の構造体配列に対して平均を計算し,平均点を返す関数 double calc_ave( struct _TEST *a, int n ) (5) ・・・ n 個の構造体配列に対して最高点を算出し,そのユーザの配列番号を返す関数 int calc_max( struct _TEST *a, int n ) (6) ・・・ n 個の構造体配列に対して平均点に満たない人の名前と点数を画面表示する関数 void show_under_ave( struct _TEST *a, int n ) C言語の構造体が良く分かっていません。 こういった条件が多いと考えづらく分からなくなります。 考えても分かっていないので困っています。 誰かすみませんが解答を教えて下さい。

  • 配列を自由に増やすには

    swingでGUIを作成しています。ドラッグされた文字を配列に加えるプログラムは作ることが出来たのですがその配列の数、要素数も未定です。ユーザーがどれだけドラッグするか不明な為。 a[5],b[6],c[6]の3つの配列の場合もあればa[4],b[4],c[7],d[3]4つの配列の場合もあります。 始めの段階で定義せずにその時々で作成していくというのはできないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • C言語 list 構造体配列

    どうしてもこの問題がわからないので教えてください!  下記の構造体タグ「seiseki」を使って,表に示すデータをもつ構造体配列「list」を作成する.  関数に構造体配列「list」のアドレスを渡す.  関数で構造体ポインタ「*list」を利用して,一番点 数の高い者(1名限定)を調べ,その名前を表示する. struct seiseki{ char name[30]; int score; name score }; 表 佐藤 80 鈴木 75 田中 95 高橋 90

  • 配列とその要素数をメンバにもつ構造体

    C言語では,配列を引数とするときに,合わせて要素数を渡さなければいけないといわれます. そこで,配列とその要素数をメンバにもつ構造体を定義して,これを要素数つき配列のように扱えば,引数として渡す場合には,この構造体を渡すだけでよいと思うのですが,このような用法は一般的に用いられているでしょうか. 単純なアイデアだと思うんですが,あまり紹介されているのを見たことがありません. もしあまり用られない用法であれば,その理由を教えてください. 現在,プログラムを書いているのですが,引数の多さに閉口しており,上の考えで,引数を減らしたいと考えています.  よろしくお願いいたします.

  • 構造体配列の一部初期化!!!

    はじめまして@ 今、下のような構造体があるとします。 ----------------------------------------------- Type TableColumn  sName As String  sKana As String End Type Type a_2  C(100) as TableColumn End Type Type a_1  B(3) as a_2 End Type global A(5) as a_1 ----------------------------------------------- ちなみに図で表すとこんな感じです。 A(5) |-B(3)  |-C(100)   |-sName   |-sKana このとき、この構造体の配列を初期化するときは普通でしたら、  Erase A とやることによってすべての配列の中身が初期化されると思うのですが、 今回は一部を消去したいのです。 たとえば、A(0).B(0)以下の中身は初期化しないで、A(0).B(1)以下は初期化する、といった感じです。 何か良い方法がありましたらぜひご教授お願いいたします。 よろしくお願いします。

  • VB2008: 構造体の配列の初期化の方向性にアドバイスを!

    構造体の演習の締めに付属リストを数えるプログラムを考えました。 D:\Temp\SecondaryMaterialList.csv 品番001, 付属1_A, 付属2_A, 付属3_A 品番002, 付属1_A, 付属2_B, 付属3_A 品番003, 付属1_B, 付属2_A, 付属3_A 品番004, 付属1_B, 付属2_A, 付属3_B 品番005, 付属1_A, 付属2_B, 付属3_B struct SecondaryMaterial {   char *aname;   int count; } SMTab[] = {  "付属1_A", 0,  "付属1_B", 0,  "付属2_A", 0,  "付属2_B", 0,  "付属3_A", 0,  "付属3_B", 0 }; これ位は、VB.Net なら軽いもんだろうと思って色々と構造体の配列の初期化にアタック。 しかし、ことごとく失敗。 多分、VB.Net なら軽いもんだが私にはそうではないということ。 色々と調べましたが、配列ではない構造体の初期化は見つかりました。 が、配列の初期化のアイデアというか確たる手法は見つかりませんでした。 「それは、こういう方向性でアプローチしたらよい!」 そのようなアドバイスが頂けたらありがたいと思って質問します。 宜しくお願いします。

  • 構造体の中の構造体

    typedef struct number{ int x; struct number *next; }Num; 初心者な質問で申し訳ないんですが、構造体の中に構造体があるのはどう解釈していいんでしょうか? typedef struct number{ int x; int y; }Num; の場合はNum a,b;がint a.x,a.y,b.x,b.yとなるのは分かるんですが・・・