以一个题目为例:
要求用户使用一个整数指出自己的身高(单位为英寸),然后将身高转化为英尺和英寸。
方法一:
利用结构体,注意函数定义一定要用结构体来定义
struct trans
{
int chi;
int cun;
};
trans transform(int);
int main()
{
using namespace std;
int a;
cin >> a;
trans b;
b = transform(a);
cout << b.chi << " " << b.cun;
while (true)
{
}
}
trans transform(int a) //注意函数名前面的定义类型一定要是结构体
{
trans b;
b.chi = a / 12;
b.cun = a % 12;
return b;
}
方法二
采用全局变量,函数返回值虽然为空,但是全局变量经过函数处理之后结果已经改变,并且不会随着函数结束而消失。
using namespace std;
int a, b;
void transform(int s)
{
a = s / 12;
b = s % 12;
}
int main()
{
int s;
cin >> s;
transform(s);
cout << a << " " << b;
while (1);
}
方法三
返回静态指针
void main(void)
{
int *a;
int b;
cin >> b;
a = transform(b);
cout << a[0]<<a[1];
while (1);
}
int* transform(int a)//注意返回值是指针,所以要加*,另外要记得与函数指针区别
{
static int shengao[2];//static一定要有
shengao[0] = a / 12;
shengao[1] = a % 12;
return shengao;
}
注意一定要加static,使得指针和数组变为静态的,不然最后输出的结果是对的,但这是典型的bug,局部指针上的值也属于局部变量,函数结束后,局部变量消失,指针指向的值不一定是所需要的值了。
方法四
使用std::tuple类模板
#include <tuple>
using namespace std;
void main(void)
{
tuple <int, int> a;
int s;
cin >> s;
a = transform(s);
cout << get<0>(a) << " " << get<1>(a);
while (1);
}
tuple <int, int> transform(int s)
{
int a, b;
a = s / 12;
b = s % 12;
return make_tuple(a, b);
}
对于tuple类模板有以下说明:
1.定义方法
tuple < ... > tuplename;
斜括号中是每个存储对象的类型;只能存储十种不同的类型,但可以存储多个对象。
2.赋值方法
需要用make_tuple()函数赋值。
具体用法可参考链接https://blog.csdn.net/xiahn1a/article/details/41670203
有好方法再积累
方法五:
使用stl::pair容器。
#include <utility>
using namespace std;
void main(void)
{
tuple <int, int> a;
int s;
cin >> s;
a = transform(s);
cout << get<0>(a) << " " << get<1>(a);
while (1);
}
pair <int, int> transform(int s)
{
int a, b;
a = s / 12;
b = s % 12;
return make_tuple(a, b);
}
注意:
1.如下的程序编译是合法的,但是不能按照要求输出多个值
void main()
{
cout << ceshi();
int a = ceshi();
cout << a;
}
int ceshi()
{
int i = 0,j = 1,k = 2;
return (i, j, k);
}
输出结果都为2,也就是返回三个值,但是一个个的返回,并且后面的值会覆盖前面的值。