C - "initializer element is not constant"和"near 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};出现错误.有人可以解释一下这是什么意思吗?我已经阅读了其他类似的论坛帖子,但这并不适用于我的情况

首先,它的意思是它所说的

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

但不仅仅是因为无法返回本地数组,因为它是未定义的行为(使其static解决问题但会导致其他问题(,而是尝试使用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 *,请尝试使用比static double svar[]更好的malloc()

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

而且您不需要辅助x,在我的回答中的任何建议的解决方案中yz

最新更新