华为售后换机可靠吗:帮忙看一下函数的传递问题?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 02:51:31
#include<stdio.h>
#include<iostream.h>
#include<string.h>
typedef struct {
int tm_year;
short tm_second;
short tm_minute;
short tm_hour;
short tm_day;
short tm_month;
} time_all;

bool isRun(int year)//判断是否为闰年
{
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0) return true;
else return false;
}
else return true;
}
else return false;
}

int getDays(int month,int year)//根据月份和年份算出当月的天数
{
int a[12]={31,28,31,30,31,30,31,30,31,30,30,31};
if(month!=2) return a[month-1];
else
{
if(isRun(year)) return 29;
else return 28;
}
}

int addSecond(time_all& nowTime)//增加一秒
{
// time_all tempStruct;
// memcpy(&tempStruct,&nowTime,sizeof(time_all));
if((nowTime.tm_second=++nowTime.tm_second%60)!=0)
return 0;

if((nowTime.tm_minute=(nowTime.tm_minute+1)%60)!=0)
return 0;

if((nowTime.tm_hour=(nowTime.tm_hour+1)%24)!=0)
return 0;

if(nowTime.tm_day!=getDays(nowTime.tm_month,nowTime.tm_year))
{
nowTime.tm_day++;
return 0;
}
else nowTime.tm_day=1;

if(nowTime.tm_month!=12)
{
nowTime.tm_month++;
return 0;
}
else nowTime.tm_month=1;

nowTime.tm_year++;
return 0;
}

void main()
{
time_all timeNow;
cout<<"输入时间 依次顺序为年、月、日、时、分、妙"<<endl;
cin>>timeNow.tm_year>>timeNow.tm_month>>timeNow.tm_day>>timeNow.tm_hour>>timeNow.tm_minute>>timeNow.tm_second;
addSecond(timeNow);
cout<<timeNow.tm_year<<"年"<<timeNow.tm_month<<"月"<<timeNow.tm_day<<"日"<<timeNow.tm_hour<<"时"<<timeNow.tm_minute<<"分"<<timeNow.tm_second<<"秒";
}

上面这段程序中addSecond(timeNow);
为什么不用在timeNow 前面加 &
用int addSecond(time_all& nowTime)接收
这里面 &符号是什么意思啊?

可以解释一下吗?
谢谢

&是将变量地址作为参数
这个是参数传递的一种方式。举个例子你就明白了。
int addSecond(time_all &nowTime)这样定义时,在addSecond函数结束后,timeNow参数的值为addSecond函数中运行到最后的值。因为函数直接修改了timeNow参数地址的值
int addSecond(time_all nowTime)这样定义时,在addSecond函数结束后,timeNow参数的值仍为当初传入addSecond函数的值,没有改变。

你可以把 &nowTime参数看为返回值

在调用函数的时候是不用加&的,不关函数是怎样定义的

&是取地址的意思.

重学C++,