CPP学习之——结构体与函数(18.16)

一 概述

由于结构可以看作一个数据类型并且可以赋值,因此我们可以将结构体传递到函数中,或者在函数中返回一个结构。

二 示例演示及结构输出

2.1 原型

  • 这里引用C++ primer中的一个例子
  • 该例是求出两天的时间相加后的总时间,其中每天的时间可以定义成一个结构,该结构中有两个成员——小时和分钟。小时与小时相加得出总小时,分钟与分钟相加得出总分钟,然后将相加的结果返回

2.2 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
using namespace std;
struct time
{
int hour;
int minute;

};
const int perhour=60;
time sum(time t1,time t2);
void show(time t){cout<<t.hour<<":"<<t.minute<<endl;}
int main()
{
time one={8,15};
time two={6,55};
time day=sum(one,two);
cout<<"两天时间总计:";
show(day);
time day3={9,35};
cout<<"三天时间总计:";
show(sum(day,day3));
return 0;
}
time sum(time t1,time t2)
{
time total;
total.minute=(t1.minute+t2.minute)%perhour;
total.hour=t1.hour+t2.hour+(t1.minute+t2.minute)/perhour;
return total;
}

2.3 输出结果

1
2
两天时间总计:15:10
三天时间总计:24:45

2.4 分析说明

  • 按值返回我们知道需要复制返回的结构,结构体可以容纳不同类型的变量,相应产生的问题时复制的数据也很多。假如我们不想复制数据,那么就要按地址返回

2.5 按地址返回(代码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<iostream>
using namespace std;
struct time
{
int hour;
int minute;

};
const int perhour=60;
time *sum(time t1,time t2);
void show(time t){cout<<t.hour<<":"<<t.minute<<endl;}
int main()
{
time one={8,15};
time two={6,55};
time *day=sum(one,two);
cout<<"两天时间总计:";
show(*day);
time day3={9,35};
cout<<"三天时间总计:";
time *p=sum(*day,day3);
show(*p);
delete day;
delete p;
return 0;
}
time *sum(time t1,time t2)
{
time * total=new time;
total->minute=(t1.minute+t2.minute)%perhour;
total->hour=t1.hour+t2.hour+(t1.minute+t2.minute)/perhour;
return total;
}