你不能在 C 中返回一个值数组(你只会返回一个指向该数组的指针)。
您可以考虑返回struct,例如声明
struct monsterstat_st {
double m_hp, m_kmin, m_kmax, m_max;
};
typedef struct monsterstat_st monsterstat_t;
在标题中(或在您的函数之前)。那么我认为你的函数名为compute_monster_stat 可能是
monsterstat_t compute_monster_stat(double x) {
monsterstat_t res;
res.m_hp = compute_hp(x); // or some computation
res.m_kmin = compute_kmin(x); // or some other computation
res.m_kmax = compute_kmax(x); // or something more
res.m_max = compute_max(x); // or your own code
return res;
}
你会这样称呼它,例如
monsterstat_t mystat = compute_monster_stat(something);
但是,请注意(至少在 Linux x86-64 上根据其ABI)数据将进入堆栈(但如果您只有 2 个成员,它可以通过寄存器;细节非常具体)。
另外,在 C 代码中,通常是传递一个指向计算数据的指针,所以代码
int computed_monster_stat(monsterstat_t* ptr, double data) {
if (ptr && happy_with(data)) {
ptr->m_hp = compute_hp(data);
ptr->m_kmin = compute_kmin(data);
ptr->m_kmax = compute_kmax(data);
ptr->m_max = compute_max(data);
return 1;
} else return 0;
}
你会使用喜欢
monsterstat_t s;
memset (&s, 0, sizeof(s)); // easy way to clear the data
if (computed_monster_stat (&s, data)) {
// do something with s.m_kmin etc....
} else {
// unhappy
}
Linux 上的stat(2) 或clock_gettime(2) 系统调用给出了更具体的示例。
或者,返回一个 [pointer to] 一些 heap allocated struct 或数组(所以在你的函数中调用 malloc),例如记录的约定,您的函数的调用者必须 free 它。当心memory leaks、buffer overflow、undefined behavior等等……
顺便说一句,花几个小时阅读一本好的C编程书籍,并研究和研究一些免费软件(例如@987654328 @、sourceforge、github 和许多其他地方)类似于您要编码的内容。