我想返回一个数组,因为如果它被覆盖并不重要,我的方法是这样的:
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,但这并不适用于我的案例
答案 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
,x
和y
。