假设我在函数中调用了以下数组:
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
};
我想返回 int n 和两个数组。如果我知道数组 x 和 w 的长度,我可以使用一个很容易的结构来做到这一点。但是,取决于输入的函数可以返回长度为 2、4、6、15 等的数组 x 和长度为 2、4、6、15 等的数组 w。我不知道数组 w 的长度和X。
我创建了一个结构:
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 中填充数组。这可以使用 for 循环来完成吗?如果是这样,我是否必须定义
Quadpts qpt = (Quadpts) malloc(size(Quadpts));
每次都以不同的方式来解释结构数组的新增内容?
谢谢您的帮助。我是 C 的新手,仅限于 MATLAB 知识。
编辑:
我意识到我对那些大数组有问题。我正在使用 switch case 语法来为变量 x 和 w 分配不同大小的数组。但我意识到我需要指定这些数组的大小,并且它们只能在 for 循环中看到。我怎样才能使数组可以在 for 循环之外看到,以便我可以将它们保存到结构中?以下是我的代码的缩短版本。我经常在 double x[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]);
}