"初始化元素不是常数"和"接近初始化"

时间:2017-08-18 19:35:43

标签: c initialization

我想返回一个数组,因为如果它被覆盖并不重要,我的方法是这样的:

double * kryds(double linje_1[], double linje_2[]){
double x = linje_1[1]*linje_2[2]-linje_1[2]*linje_2[1];
double y = linje_1[2]*linje_2[0]-linje_1[0]*linje_2[2];
double z = linje_1[0]*linje_2[1]-linje_1[1]*linje_2[0];
static double svar[] = {x, y, z};
return svar;
}

但是,我在static double svar[] = {x, y, z};收到错误。有人可以解释一下它的含义吗?我已阅读其他论坛帖子,例如this one,但这并不适用于我的案例

1 个答案:

答案 0 :(得分:2)

首先,它意味着它所说的

  • 初始值设定项必须是常量表达式

但不仅仅是你不能返回一个本地数组,因为它是未定义的行为(使它static解决问题但导致其他问题),而是尝试使用{{1 }}

struct

或者,如果您必须返回struct point3d {double x; double y; double z; }; struct point3d kryds(double *linje_1, double *linje_2) { struct point3d result; result.x = linje1[1] * linje2[2] - ... result.y = ... // and so on return result; } ,请尝试使用double *,而不是malloc()

static double svar[]

当你确定不再使用它时,你需要记住double *svar; svar = malloc(3 * sizeof(*svar)); if (svar == NULL) // This will almost NEVER happen, but you MUST check return NULL; svar[0] = linje_1[1] * linje_2[2] - linje_1[2] * linje_2[1]; // And so on 指针。

或者,如果你坚持

free()

在我的答案中,您不需要在任何建议的解决方案中使用辅助static double svar[3]; svar[0] = linje_1[1] * linje_2[2] - linje_1[2] * linje_2[1]; // And so on xy