Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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 leaksbuffer overflowundefined behavior等...

顺便说一句,花几个小时阅读一本好的C编程书,并研究类似于您想要编写的代码的免费软件(例如,在freecodesourceforgegithub和许多其他地方)。

关于c - C返回多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19845113/

10-11 22:45
查看更多