No.3ベストアンサー
- 回答日時:
ちょっと長くなりますが、いいですか?
まず、配列の定義を構造体のメンバではなく、
実体定義にします。
そして、配列のポインタと、そのデータ長(要素数)をメンバにもつ構造体Aを作成します。
そして、Aを100個の配列にしたメンバを持つ構造体Bを作成します。
そうするとForループでアクセス可能になります。
相当わかりにくいと思うので、
以下にサンプルコードを書きます。
ちなみにこのデータ構造はコードメンテナンスを楽にする手法で、配列の中身や大きさが変更になっても、ロジックは変更せずに、データ定義だけの変更ですみます。
#define A1_SIZE (10) // A1の配列数
#define A100_SIZE (20) // A100の配列数
#define An_MAX_NUM (100) // データ数
/* 配列そのものの定義 */
chara1[A1_SIZE] ;// a1データ
/* 中略 */
chara100[A100_SIZE] ;// a100データ
/* データ定義構造体 */
typedef struct
{
char *data; // データのアドレス
int datalen ; // データ長
} tDATA_DEF ;
/* データ管理構造体 */
typedef struct
{
tDATA_DEF data_def[An_MAX_NUM];
} tDATA ;
/* データと管理構造体のリンク */
const tDATA tData =
{
/* A1データ */
{ a1, // データのアドレス
A1_SIZE // データ長
},
/* 中略 */
/* A100データ */
{ a100, // データのアドレス
A100_SIZE // データ長
},
}
void
main()
{
int i ;
/* 可変長のデータを0クリアする */
for( i=0; i<An_MAX_NUM; i++ )
{
memset( tData.data_def[i].data, 0, tData.data_def[i].datalen );
}
}
No.4
- 回答日時:
普通に
test.a1
test.a2
ですよ。
数字の部分を書き換えれば好きなところにアクセスできます。
構造体の中身を char a[100][20];
とでもすればa1,a2の代わりにa[1],a[2]と出来ると思った。
No.2
- 回答日時:
本来、そのようなプログラマがこまるような構造体は作らないはずです。
どうしてそのような構造体が作成されたのか、非常に興味があります。よろしければ、そのような構造体が作成された背景を教えていただけませんでしょうか。そうすれば、もしかしたら、別の解決方法が見つかるかも知れません。お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 2 2022/07/21 00:02
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/15 08:30
- Excel(エクセル) excel関数について 3 2022/06/06 21:58
- HTML・CSS 全部のアクセスを指定したページに転送させたい 2 2022/06/28 16:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
コンボボックスのインデックス...
-
エクセルでXY座標に並べられた...
-
配列の中の最大値とそのインデ...
-
Excel2010のinputboxで複数デー...
-
C言語 ポインタと配列
-
VB6のメモリ解放に関して
-
Excelマクロ:配列データからグ...
-
.NET 文字コードの変換
-
Segmentation Fault (メモリ制限?)
-
エクセルVBAで実行時エラー7、...
-
複数のtextboxの処理を一括で行...
-
ReDim PreserveよりもReDimが遅い
-
Redim とEraseの違いは?
-
配列の初期化に時間がかかりま...
-
CheckBoxの配列化
-
COBOLの基本的な事なので...
-
C#でbyte配列から画像を表示さ...
-
EXCEL VBA 配列デー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
Excel2010のinputboxで複数デー...
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
VBAで配列引数を値渡しできない...
-
C++で作成したDLLにVBAから配列...
-
構造体配列の特定のメンバーをF...
-
OutOfMemoryExceptionの回避策...
-
大量の変数を定義するにはどう...
-
VBAでMODE関数をつくる
-
VBScriptでCSVファイルを読み出...
-
定数配列の書き方
-
Segmentation Fault (メモリ制限?)
-
Excelのメモリ(配列)の上限は2G...
-
Redim とEraseの違いは?
-
CheckBoxの配列化
-
配列の中の最大値とそのインデ...
おすすめ情報