gpt4 book ai didi

c - "initializer element is not constant"和 "near initialization"

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:01 30 4
gpt4 key购买 nike

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

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但这并不适用于我的情况

最佳答案

一言以蔽之

  • 初始化器必须是常量表达式,

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

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;
}
/p>
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

并且在我的回答中提出的任何解决方案中,您都不需要辅助 xyz

关于c - "initializer element is not constant"和 "near initialization",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45763905/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com