No.6ベストアンサー
- 回答日時:
> data構造体の方も動的に確保したいと考えております。
ならば data に対しても vector を使います。
#include <vector>
struct data {
std::vector<int> i;
std::vector<double> d;
data(int ni=10, int nd=10) : i(ni), d(nd) {}
};
int main() {
std::vector<data> data1(10); // data[0]..data1[9]
....
return 0;
}
回答ありがとうございます。ちゃんと実行確認をしてから、お礼の内容を書けばよかったのですが、一時の間、行うことができなくなってしまいました。一応ここで締め切らせてもらって、後ほど実行してみようと思います。
本当にありがとうございました。
No.5
- 回答日時:
data構造体の動的確保も同じです。
ポインタにします。struct data{
int *i;
double *d;
} *data1;
data1 = calloc(10, sizeof(struct data));
if (data1 == NULL) {
エラー処理
}
data1[0].i = calloc(30, sizeof(int));
if (data1[0].i == NULL) {
エラー処理
}
data1[0].d = calloc(40, sizeof(double));
if (data1[0].d == NULL) {
エラー処理
}
data1[0].i[0] = 1;
data1[0].d[0] = 1.1;
No.4
- 回答日時:
# ANo.#3 を受けて...
C++なら可変長の配列がライブラリに用意されています。
struct data {
std::vector<int> i;
std::vector<double> d;
data(int ni, int nd) : i(ni), d(nd) {}
};
回答ありがとうございます。vectorの存在は知っていたのですが、No.1~No.3さんまでの御礼の内容にありますように、data構造体の方も動的に確保したいと考えております。
また、名前空間の使い方(私のパソコンでstdが認識できない)と、この行の内容がわからないので、勉強してみます。
data(int ni, int nd) : i(ni), d(nd) {}
No.3
- 回答日時:
ちょっと、質問の意図からずれるかもしれませんが c++ に手を出してみてはどうでしょう?
struct data {
int *i;
double *d;
data();
~data();
};
data::data()
{
i = new int[確保したい個数(その1)];
d = new double[確保したい個数(その2)];
}
data::~data()
{
delete [] i;
delete [] d;
}
{ /* 使うとき */
data* data1 = new data[10];
~
}
ま、確保したい個数をどう渡すか、ってことは別に考えなくちゃいけないんですが。
C の範囲だと、#2 のような感じで、いちいち malloc() するしかないんです。
{
struct data {
int *i;
double *d;
} data1[10];
int i;
for (i = 0 ; i < 10 ; ++i) {
data1[i].i = malloc(sizeof(int) * 確保したい個数(その1));
data1[i].d = malloc(sizeof(double) * 確保したい個数(その2));
}
}
と、いった感じで。
# エラー処理も入れてなければ、動作確認もしてません
回答ありがとうございます。C++は最近になって勉強し始めたのでなれていませんが、少しずつプログラムに取り入れていこうとおもっています。もし、dataの構造体も動的に確保したい場合はどうすればよいか教えてもらえないでしょうか?よろしくお願いします。
No.2
- 回答日時:
素人です 記述のしかたが古いのですけど、いちおう Borland C++ 5.5.1 で
コンパイルと実行して見ました、問題ないみたいです。
#include <stdio.h>
#include <stdlib.h>
struct data{
int *i; /*←ここの配列を動的に確保したい*/
double *d; /*←ここの配列を動的に確保したい*/
}data1;
void main()
{
int i;
int count0,count1;
count0=100;
count1=200;
if ((data1.i=(int *)malloc(sizeof(int)*count0))==NULL)
{
printf("メモリが確保できませんでした\n");
exit( EXIT_FAILURE );
}
for(i=0;i<100;i++) {*(data1.i+i)=0;}
if ((data1.d=(double *)malloc(sizeof(double)*count1))==NULL)
{
printf("メモリが確保できませんでした\n");
exit( EXIT_FAILURE );
}
for(i=0;i<100;i++) {*(data1.i+i)=0;}
for(i=0;i<100;i++) {data1.i[i]=i;}
for(i=0;i<200;i++) {data1.d[i]=i;}
for(i=0;i<100;i++) {printf("%d: %d\n",i,data1.i[i]);}
for(i=0;i<200;i++) {printf("%d: %e\n",i,data1.d[i]);}
}
見当はずれでなかったら嬉しいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(クラウドサービス・オンラインストレージ) OneDriveを自動的にバックアップしたいのですが、どんな方法が良いでしょうか 1 2022/05/30 05:56
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- 医療・安全 今流行してる新型コロナはEG.5が増加中で米国など世界50カ国以上で確認され入院患者も毎週増え始めて 1 2023/08/22 11:22
- 宇宙科学・天文学・天気 “コールドスリープ” とは可能な技術なのか? 実験したことがあるのか? 2 2022/09/06 06:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
C言語から質問です。
-
C言語の2次元配列 容量が大き...
-
構造体のextern方法
-
C言語の課題が出たのですが自力...
-
c言語 構造体
-
C#でのフィボナッチ数列
-
C言語において、 配列要素をひ...
-
C言語でエラーの直し方が分かり...
-
構造体の配列 char *' 型は 'ch...
-
MFC - ダイアログボックスのPic...
-
2番目の最大値を求める
-
char型配列をint型に代入するには
-
関数への構造体の配列の渡し方<...
-
C言語の配列のコピーについて
-
C言語についてです 5人のテスト...
-
ポインタを使って構造体の配列...
-
関数のプロトタイプ宣言
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
c言語
-
構造体のextern方法
-
define で 配列
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
コンボボックスでデフォルト値...
-
2番目の最大値を求める
-
C言語の2次元配列 容量が大き...
-
C#で配列が空かを判定するには?
-
MFCのCArrayを使った二次元配列
-
C言語の課題が出たのですが自力...
-
C言語 ファイルの指定された行...
-
Cのエラー
-
ポインタを使って構造体の配列...
-
配列のアドレス部
-
char型配列をint型に代入するには
-
MFC - ダイアログボックスのPic...
-
C言語から質問です。
おすすめ情報