可能重复:
从函数返回多个值
假设我已将两个值传递给函数,iCalculate(int x, int y)并iCalculate返回两个值.具体如下: -
现在我应该如何使用相同的函数同时返回上述两个值?
我的方法是: -
int* iCalculate(int x,int y){
int temp[2];
temp[0] = x*y;
temp[1] = x/y;
return temp;
}
Run Code Online (Sandbox Code Playgroud)
Arm*_*yan 29
返回本地数组的第一个元素的地址具有未定义的行为(至少在以后取消引用它).
您可以使用输出参数,即传递两个指针,并在其中设置值
void Calculate(int x, int y, int* prod, int* quot)
{
*prod = x*y;
*quot = x/y;
}
Run Code Online (Sandbox Code Playgroud)
用法:
int x = 10,y = 2, prod, quot;
Calculate(x, y, &prod, ")
Run Code Online (Sandbox Code Playgroud)
您可以做的另一件事是将数据打包到结构中
typedef struct
{
int prod;
int quot;
} product_and_quot;
product_and_quot Calculate(int x, int y)
{
product_and_quot p = {x*y, x/y};
return p;
}
Run Code Online (Sandbox Code Playgroud)
Fre*_*Foo 11
这将无法工作,因为您正在返回一个指向临时数组的指针,该指针将在函数返回时停止存在.
相反,定义
typedef struct { int first, second; } IntPair;
Run Code Online (Sandbox Code Playgroud)
并返回该类型的对象.
(这是标准库的功能div和ldiv作用,除了它们以不同的方式调用类型.)