新程序员通常在寻找从函数返回多个值的方法。不幸的是,C和C++不允许直接这样做。但是幸运的是,通过一些巧妙的编程,我们可以轻松实现这一目标。
下面是从C函数中返回多个值的方法:
- 通过使用指针。
- 通过使用结构。
- 通过使用数组。
示例:考虑一个示例,其中的任务是查找两个不同数字中的较大和较小值。 我们可以编写多个函数。主要问题是调用多个函数的麻烦,因为我们需要返回多个值,并且当然要键入更多的代码行。
1)使用指针返回多个值:传递参数及其地址,并使用指针更改其值。
// 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: \n");
scanf("%d%d", &x, &y);
// The last two arguments are passed
// by giving addresses of memory locations
compare(x, y, &great, &small);
printf("\nThe 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
2)使用结构返回多个值:由于结构是用户定义的数据类型。这个想法是用两个整数变量定义一个结构,并将较大和较小的值存储到这些变量中,然后使用该结构的值。
// 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: \n");
scanf("%d%d", &x, &y);
// The last two arguments are passed
// by giving addresses of memory locations
result = findGreaterSmaller(x, y);
printf("\nThe 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
3)使用数组返回多个值(仅当返回的项属于同一类型时有效):当数组作为参数传递时,其基地址将传递给函数,因此对数组副本所做的任何更改都将在原始数组中更改。
以下是使用数组返回多个值的程序,即在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: \n");
scanf("%d%d", &x, &y);
findGreaterSmaller(x, y, arr);
printf("\nThe 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++方法
1)使用引用返回多个值:我们在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: \n");
scanf("%d%d", &x, &y);
// The last two arguments are passed
// by giving addresses of memory locations
compare(x, y, great, small);
printf("\nThe 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
2)使用Class和Object返回多个值:这个想法类似于结构。我们使用两个整数变量创建一个类,并将较大和较小的值存储到这些变量中,然后使用该结构的值。
// 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: \n");
scanf("%d%d", &x, &y);
// The last two arguments are passed
// by giving addresses of memory locations
result = findGreaterSmaller(x, y);
printf("\nThe 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
3)使用STL元组返回多个值:这个想法类似于结构。我们用两个整数变量创建一个元组并返回该元组,然后在main函数内部,我们使用tie fucntion将值分配给函数返回的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;
}
输出:
The greater number is 8 and the smaller number is 5