関数で呼び出す次の配列があるとします。
int n = 20;
double x[] = {
0.003435700407453, 0.018014036361043, 0.043882785874337, 0.080441514088891,
0.126834046769925, 0.181973159636742, 0.244566499024586, 0.313146955642290,
0.386107074429177, 0.461736739433251, 0.538263260566749, 0.613892925570823,
0.686853044357710, 0.755433500975414, 0.818026840363258, 0.873165953230075,
0.919558485911109, 0.956117214125663, 0.981985963638957, 0.996564299592547
};
double w[] = {
0.008807003569576, 0.020300714900193, 0.031336024167055, 0.041638370788352,
0.050965059908620, 0.059097265980759, 0.065844319224588, 0.071048054659191,
0.074586493236302, 0.076376693565363, 0.076376693565363, 0.074586493236302,
0.071048054659191, 0.065844319224588, 0.059097265980759, 0.050965059908620,
0.041638370788352, 0.031336024167055, 0.020300714900193, 0.008807003569576
};
intnと2つの配列を返したいと思います。配列xとwの長さがわかれば、簡単な構造を使用してこれを行うことができます。ただし、入力に依存する関数は、長さ2、4、6、15などの配列xと長さ2、4、6、15などの配列wを返すことができます。配列wとの長さはわかりません。バツ。
構造を作成しました:
struct quadpts{ //structure used to pass multiple values into roeFlux
int n; //The specific heat ratio
double *x;
double *w;
};
typedef struct quadpts Quadpts;
使用済み:
Quadpts qpt = (Quadpts) malloc(size(Quadpts));
配列xおよびwにさまざまな長さの値を割り当てます。しかし、私が見たり調べたりした多くの例では、人々が一度に1つの価値を追加していることに気づきました。配列全体を構造内のさまざまな長さの配列に割り当てることは可能ですか?または、構造体の配列を1つずつ埋めることに制限されていますか?これはforループを使用して実行できますか?もしそうなら、私は定義する必要がありますか
Quadpts qpt = (Quadpts) malloc(size(Quadpts));
構造体配列への新しい追加を説明するために毎回異なる方法で?
ご協力ありがとうございました。私はCを初めて使用し、MATLABの知識に制限されています。
編集:
私はそれらの大きなアレイに問題があることに気づきました。変数xとwに異なるサイズの配列を割り当てるために、switchcase構文を使用しています。しかし、最初にそれらの配列のサイズを指定する必要があり、それらはforループ内でのみ表示されることに気付きました。配列をforループの外側に表示して、構造体に保存できるようにするにはどうすればよいですか?以下は私のコードの短縮版です。以前の定義がここまたは再定義であったため、doublex[n]で常にエラーが発生します。
double quad1d(int pqOrder){
int n;
switch(pqOrder)
{
case 1:
n = 1;
double x[n] = {
0.500000000000000
};
double w[n] = {
1.000000000000000};
break;
case 3:
// Order 3 Gauss-Legendre points
n = 2;
double x[n] = {
0.211324865405187, 0.788675134594813
};
double w[n] = {
0.500000000000000, 0.500000000000000
};
break;
}
int i;
Quadpts * qpt = (Quadpts*)malloc(sizeof(Quadpts));
for (i=0; i<n; i++){
qpt->x = malloc(qpt->x_len * sizeof(double));
qpt->w = malloc(qpt->w_len * sizeof(double));
qpt.x=x[i];
qpt.w=w[i];
}
return &(qpt[0]);
}