Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,因此它是on-topic,用于堆栈溢出。
6年前关闭。
所以我想退货
这可能与另一个具有相同大小的数组接收值吗?
Obs:
在标题中(或在函数之前)。那么我想您命名为
然后您会像这样称呼它
但是,请注意(至少在Linux x86-64上根据其ABI而言)数据将进入堆栈(但是如果您只有2个成员,则可以通过寄存器;详细信息非常具体)。
另外,在C代码中,通常会传递一个指向计算数据的指针,因此代码
你会用像
Linux上的stat(2)或clock_gettime(2)系统调用给出了一个更具体的示例。
或者,将[指针指向]返回某些heap allocated
顺便说一句,花几个小时阅读一本好的C编程书,并研究类似于您想要编写的代码的免费软件(例如,在freecode,sourceforge,github和许多其他地方)。
想改善这个问题吗? Update the question,因此它是on-topic,用于堆栈溢出。
6年前关闭。
所以我想退货
monsterstat[4] = {monsterhp, monsteratkmin,monsteratkmax,monstermax};
return monsterstat;
这可能与另一个具有相同大小的数组接收值吗?
Obs:
double monsterstat[4];
最佳答案
您不能在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)系统调用给出了一个更具体的示例。
或者,将[指针指向]返回某些heap allocated
struct
或数组(因此在函数内调用malloc
),例如文件的约定,即函数的调用者必须对其进行free
。提防memory leaks,buffer overflow,undefined behavior等...顺便说一句,花几个小时阅读一本好的C编程书,并研究类似于您想要编写的代码的免费软件(例如,在freecode,sourceforge,github和许多其他地方)。
关于c - C返回多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19845113/