如何在C中返回两个值

And*_*̷y̷ 7 c

我有以下功能:

int conMS(time_in_seconds) {
  int minutes, seconds;
  minutes = time_in_seconds / 60;
  seconds = time_in_seconds % 60;
  return minutes, seconds;
}
Run Code Online (Sandbox Code Playgroud)

当在另一个函数中使用时,我收到几条错误消息:

warning: left-hand operand of comma expression has no effect [-Wunused-value]
warning: left-hand operand of comma expression has no effect [-Wunused-value]
 minutes,seconds = conMS(time);
warning: ‘minutes’ is used uninitialized in this function [-Wuninitialized]
warning: left-hand operand of comma expression has no effect [-Wunused-value]
 return minutes, seconds;
Run Code Online (Sandbox Code Playgroud)

无论如何,有没有办法可以从函数返回两个值.这两个值可以是任何东西:a int和a char,a float和a int......

我很抱歉,如果这对你来说很简单,但我是C的初学者,我能学到的唯一方法就是提问.另外,请尽量简化您的解释.

更新:这可以通过指针轻松完成,如下所示.

void conMS(int time, 
int *minutesP, /* a pointer to variable minutes */
int *secondsP) // a pointer to variable seconds //
{ 
    *minutesP = time / 60; 
    *secondsP = time % 60; 
}   
Run Code Online (Sandbox Code Playgroud)

稍后您将此函数称为:

conMS( 210, &minutes, &secs)    /* Where minutes, secs are defined integers */ 
Run Code Online (Sandbox Code Playgroud)

这将为变量分配时间(以秒为单位)并为变量minutes分配秒数secs

Bat*_*eba 18

两种选择:

1)传递指向要修改的变量的指针.然后你的函数原型变成了

int conMS(time_in_seconds, int* minutes, int* seconds)
Run Code Online (Sandbox Code Playgroud)

2)使用struct包含minutesseconds作为成员并返回.

我更喜欢(1),因为在(2)的情况下,我总是担心不必要的价值副本,并且我依赖于返回值优化时会感到紧张,因为它本质上是一个编译器选择而不是标准C的强制要求.此外,调用者语法comMS(time_in_seconds, &minutes, &seconds)告诉我期望 minutesseconds被修改.

一些约定也随着选项(1)增长:零结果通常表示成功,非零表示失败.

  • 注意:通常在第一种情况下返回错误代码(或成功代码). (2认同)

小智 9

您可以创建struct并返回它

struct time{
   int minutes;
   int seconds;
};

struct time conMS(time_in_seconds)
{
   struct time ret;
   ret.minutes = time_in_seconds / 60;
   ret.seconds = time_in_seconds % 60;
   return ret;
}
Run Code Online (Sandbox Code Playgroud)


bga*_*ath 7

你可以使用指针..

void conMS(int time_in_seconds, int * minutes, int * seconds)
{
    *minutes = time_in_seconds / 60;
    *seconds = time_in_seconds % 60;
}
Run Code Online (Sandbox Code Playgroud)

你可以这样称呼它......

int time = 187;
int m, s;

conMS(time, &m, &s);
Run Code Online (Sandbox Code Playgroud)