新程序员通常在寻找从函数返回多个值的方法。不幸的是,C和C++不允许直接这样做。但幸运的是,通过一点巧妙的编程,我们可以轻松实现这一点。
null
以下是从C中的函数返回多个值的方法:
- 通过使用指针。
- 通过使用结构。
- 通过使用数组。
例子: 考虑一个例子,任务是找到两个不同的数字的越来越小。我们可以编写多个函数。主要的问题是调用多个函数很麻烦,因为我们需要返回多个值,当然,还要输入更多的代码行。
- 使用指针返回多个值: 将参数与地址一起传递,并使用指针更改其值。这样这些值就变成了原始参数。
// Modified program using pointers
#include <stdio.h>
// add is the short name for address
void
compare(
int
a,
int
b,
int
* add_great,
int
* add_small)
{
if
(a > b) {
// a is stored in the address pointed
// by the pointer variable *add_great
*add_great = a;
*add_small = b;
}
else
{
*add_great = b;
*add_small = a;
}
}
// Driver code
int
main()
{
int
great, small, x, y;
printf
(
"Enter two numbers: "
);
scanf
(
"%d%d"
, &x, &y);
// The last two arguments are passed
// by giving addresses of memory locations
compare(x, y, &great, &small);
printf
(
"The greater number is %d and the"
"smaller number is %d"
,
great, small);
return
0;
}
输出:Enter two numbers: 5 8 The greater number is 8 and the smaller number is 5
- 使用结构返回多个值: 因为结构是用户定义的数据类型。其思想是定义一个包含两个整数变量的结构,并将较大和较小的值存储到这些变量中,然后使用该结构的值。
// Modified program using structures
#include <stdio.h>
struct
greaterSmaller {
int
greater, smaller;
};
typedef
struct
greaterSmaller Struct;
Struct findGreaterSmaller(
int
a,
int
b)
{
Struct s;
if
(a > b) {
s.greater = a;
s.smaller = b;
}
else
{
s.greater = b;
s.smaller = a;
}
return
s;
}
// Driver code
int
main()
{
int
x, y;
Struct result;
printf
(
"Enter two numbers: "
);
scanf
(
"%d%d"
, &x, &y);
// The last two arguments are passed
// by giving addresses of memory locations
result = findGreaterSmaller(x, y);
printf
(
"The greater number is %d and the"
"smaller number is %d"
,
result.greater, result.smaller);
return
0;
}
输出:Enter two numbers: 5 8 The greater number is 8 and the smaller number is 5
- 使用数组返回多个值(仅当返回的项目类型相同时有效): 当数组作为参数传递时,它的基址就会传递给函数,所以无论对数组副本做了什么更改,它都会在原始数组中更改。 下面是使用数组返回多个值的程序,即在arr[0]处存储较大的值,在arr[1]处存储较小的值。
// Modified program using array
#include <stdio.h>
// Store the greater element at 0th index
void
findGreaterSmaller(
int
a,
int
b,
int
arr[])
{
// Store the greater element at
// 0th index of the array
if
(a > b) {
arr[0] = a;
arr[1] = b;
}
else
{
arr[0] = b;
arr[1] = a;
}
}
// Driver code
int
main()
{
int
x, y;
int
arr[2];
printf
(
"Enter two numbers: "
);
scanf
(
"%d%d"
, &x, &y);
findGreaterSmaller(x, y, arr);
printf
(
"The greater number is %d and the"
"smaller number is %d"
,
arr[0], arr[1]);
return
0;
}
输出:Enter two numbers: 5 8 The greater number is 8 and the smaller number is 5
仅用C++方法
- 使用引用返回多个值: 我们使用 C++中的引用 存储返回的值。
// Modified program using References in C++
#include <stdio.h>
void
compare(
int
a,
int
b,
int
&add_great,
int
&add_small)
{
if
(a > b) {
add_great = a;
add_small = b;
}
else
{
add_great = b;
add_small = a;
}
}
// Driver code
int
main()
{
int
great, small, x, y;
printf
(
"Enter two numbers: "
);
scanf
(
"%d%d"
, &x, &y);
// The last two arguments are passed
// by giving addresses of memory locations
compare(x, y, great, small);
printf
(
"The greater number is %d and the"
"smaller number is %d"
,
great, small);
return
0;
}
输出:Enter two numbers: 5 8 The greater number is 8 and the smaller number is 5
- 使用类和对象返回多个值: 这个想法与结构类似。我们创建一个包含两个整数变量的类,并将大小值存储到这些变量中,然后使用该结构的值。
// Modified program using class
#include <stdio.h>
class
GreaterSmaller {
public
:
int
greater, smaller;
};
GreaterSmaller findGreaterSmaller(
int
a,
int
b)
{
GreaterSmaller s;
if
(a > b) {
s.greater = a;
s.smaller = b;
}
else
{
s.greater = b;
s.smaller = a;
}
return
s;
}
// Driver code
int
main()
{
int
x, y;
GreaterSmaller result;
printf
(
"Enter two numbers: "
);
scanf
(
"%d%d"
, &x, &y);
// The last two arguments are passed
// by giving addresses of memory locations
result = findGreaterSmaller(x, y);
printf
(
"The greater number is %d and the"
"smaller number is %d"
,
result.greater, result.smaller);
return
0;
}
输出:Enter two numbers: 5 8 The greater number is 8 and the smaller number is 5
- 使用STL元组返回多个值: 这个想法与结构类似。我们创建一个包含两个整数变量的元组并返回该元组,然后在main函数中使用tie函数为函数返回的min和max赋值。
// Modified program using C++ STL tuple
#include<iostream>
#include<tuple>
using
namespace
std;
tuple <
int
,
int
> findGreaterSmaller(
int
a,
int
b)
{
if
(a < b) {
return
make_tuple(a, b);
}
else
{
return
make_tuple(b, a);
}
}
// Driver code
int
main()
{
int
x = 5, y= 8;
int
max, min;
tie(min, max) = findGreaterSmaller(x, y);
printf
(
"The greater number is %d and the "
"smaller number is %d"
,
max, min);
return
0;
}
// This article is contributed by Blinkii
输出:The greater number is 8 and the smaller number is 5
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END