虽然结构变量和数组变量一样都可以传递多个数据项,但涉及函数时结构变量更接近于单值变量。可以把结构变量看作一个整体。进行传值和作为函数的返回值。与数组不同的地方,数组名可以作为第一个元素的地址,而结构名只能作为结构名,取地址需要用运算符&。
1.传递和返回结构
结构小时,按值传递结构(结构较大时要加内存)
根据书上例子(自己简化了一下) 从A地到B地需要3小时5分钟,B地到C地需要1小时25分钟,最后求最后A到C的时间总和,可以先用一个结构表示,一个成员表示小时(hours),一个成员表示分钟(mins)
struct MoveTime{ //定义一个结构MoveTime
int hours;
int mins;
};
现在需要一个返回该结构的函数sum()函数原型,返回类型也应该为MoveTime,参数应该一致
MoveTime sum(MoveTime m1,MoveTime m2 ); //格式为 返回类型(结构)+函数名+(参数(声明变量).参数(声明变量))
中间需要对时间数据进行一个处理,先将分钟相加,取整得出小时值,取60余得剩余分钟值
const int Hr=60; //定义一个小时的常量
total.mins=(m1.mins+m2.mins)%60; //得出分钟值
total.hours=(m1.mins+m2.mins)/60+(m1.hours+m2.hours); //得出小时值
将上述代码进行整合
#include<iostream>
using namespace std;
const int Hr = 60; //定义一个小时的常量
struct MoveTime { //定义一个结构MoveTime
int hours;
int mins;
};
MoveTime sum(MoveTime m1, MoveTime m2);
int main() {
MoveTime D1 = {5,45};
MoveTime D2 = {4,55};
MoveTime trip = sum(D1, D2); //sum返回的结构赋值给新的结构变量trip
cout << "该行程的总时长为" << trip.hours << "小时" << trip.mins << "分钟\n";
return 0;
}
MoveTime sum(MoveTime m1, MoveTime m2) {
MoveTime total; //定义一个求和的结构
total.mins = (m1.mins + m2.mins) % Hr; //得出分钟值
total.hours = (m1.mins + m2.mins) / Hr + (m1.hours + m2.hours); //得出小时值
return total;
}