/*结构作为函数参数
int numberofdays(struct date d)
整个结构可以作为参数传入函数
这时候在函数内部新建一个结构变量,并
复制调用者的结构的值
也可以返回一个结构
这与数组完全不同
*/
/*
//要求对方输入今天的日期,你输出明天的日期
#include<stdio.h>
#include<stdbool.h> //声明调用布尔类型
struct date
{
int month;
int day;
int year;
}; //建立一个结构关于month day year
bool isleap(struct date d); //声明创建一个布尔类型的函数
int numberofdays(struct date d); //声明建立以函数
int main(int argc,char const *argv[])
{
struct date today,tomorrow; //声明结构的名称
printf("Enter today's date(mm dd yyyy):");
scanf("%i %i %i",&today.month,&today.day,&today.year);
if(today.day!=numberofdays(today)) //判断这一天是否处于闰年的二月
{
tomorrow.day=today.day+1;
tomorrow.month=today.month;
tomorrow.year=today.year;
}else if(today.month == 12)
{
tomorrow.day=1;
tomorrow.month=1;
tomorrow.year=(int)today.year+1;
}else
{
tomorrow.day=1;
tomorrow.month=today.month+1;
tomorrow.year=today.year;
}
printf("Tomorrrow's date is %i-%i-%i\n",
tomorrow.year,tomorrow.month,tomorrow.day);
return 0;
}
int numberofdays(struct date d) //
{
int days;
const int dayspermonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(d.month==2&&isleap(d))
days = 29;
else
days=dayspermonth[d.month-1];
return days;
}
bool isleap(struct date d) //用布尔类型判断这一年是否是闰年
{
bool leap =false;
if(d.year%4==0&&d.year%100!=0||d.year%400==0)
{
leap =true;
}
return leap;
}
*/
/*输入结构
没有直接的方式可以一次scanf一个结构
如果我们打算写一个函数来读入结构
但是读入的结构如何送回来呢?
记住C在调用函数时是传值的
*/
/*
#include<stdio.h>
struct point
{
int x;
int y;
};
void getstruct(struct point);
void output(struct point);
void main()
{
struct point y={0,0};
getstruct(y);
output(y);
}
void getstruct(struct point p)
{
scanf("%d",&p.x);
scanf("%d",&p.y);
printf("%d,%d\n",p.x,p.y);
}
void output(struct point p)
{
printf("%d,%d\n",p.x,p.y);
}
//>>5 9
5,9
0,0
*/
/* 之前的方案,吧一个结构传入函数,然后在函数
中操作,但是没有返回回去
问题在于传入函数的是在外面那个结构的克隆体
而不是指针
传入结构和传入数组是不同那个的
在这个输入函数中,完全可以创建一个临时
变量,然后把这个结构返回给调用者
*/
/*
#include<stdio.h>
struct point
{
int x;
int y;
} ;
struct point getstruct(void); //声明两个函数
//void output(struct point);
int main(int argc,char const *argv[])
{
struct point y={0,0};
y=getstruct();
output(y);
}
struct point getstruct(void)
{
struct point p;
scanf("%d",&p.x);
scanf("%d",&p.y);
printf("%d,%d\n",p.x,p.y);
}
void output(struct point p)
{
printf("%d,%d\n",p.x,p.y);
}
*/
/* 结构指针作为参数
K&R说过
“If a large structure is to be passed to a
function ,it is generally more efficient to
pass a pointer then to copy the whole structure”
*/
/*//指向结构的指针
struct date
{
int month;
int day;
int year;
} myday;
struct date *p=&myday;
(*p).month=12;
p->month =12~p所指的month(一个新的运算符) ->表示指针所指的结构变量中成员
*/
#include<stdio.h>
struct point
{
int x;
int y;
};
struct point *getstruct(struct point*);
void output(struct point);
void print(const struct point *p);
int main(int argc,char const *argv[])
{
struct point y={0,0};
getstruct(&y);
output(y);
output(*getstruct(&y));
print(getstruct(&y));
}
struct point* getstruct(struct point *p)
{
scanf("%d",&p->x);
scanf("%d",&p->y);
printf("%d,%d\n",p->x,p->y);
return p;
}
void output(struct point p)
{
printf("%d,%d\n",p.x,p.y);
}
void print(const struct point *p)
{
printf("%d,%d\n",p->x,p->y);
}
相关文章
- 04-07python中map、reduce函数
- 04-07go语言基础之函数只有一个返回值
- 04-07Python中map和reduce函数
- 04-07Python中map和reduce函数??
- 04-07结构~函数~输入输出
- 04-07Python 函数也是一种对象
- 04-07Matlab 之 find()函数
- 04-07关于结构体的PPT
- 04-07USB协议-USB的包结构及包的分类
- 04-07【洛谷】umi的函数