结构函数
【摘要】 结构函数
1. 结构运算
#include <stdio.h>
struct date {
int month;
int day;
int year;
};
int main (int argc, char const *argv [] ) {
struct date today;
today = (struct date) {
07, 31, 2014
};
struct date day;
day = today;
printf ("Today's date is %i-%i-%i. \n",
today.year, today.month, today.day);
printf ("The day's date is %i-%i-%i. \n",
day.year, day.month, day.day) ;
return 0;
}
分析:
- 输出的两个结果都是一样的
- 添加上:day.year = 2023;结果会变成:
- 所以说day和today是两个完全不同的结构的变量。
- 在做:day = today;过程中,day得到了today里所有成员的值
2. 结构指针
- 和数组不同,结构变量的名字并不是结构变量的地址,必须使用&运算符
- struct date*pDate=&today;
- 可以用这条语句定义一个指向结构体的指针,让它取了结构的地址
- 若去掉了&,编译器会报错,所以结构的名字并不是地址
3. 结构与函数
- 声明了结构就有了自定义的数据类型,可以作为函数的参数
3.1 结构作为函数参数
例如:
int numberOfdays(struct date d)
- 整个结构可以作为参数的值传入函数
- 这时候是在函数内新建一个结构变量,并复制调用者的结构的值
- 也可以返回一个结构
- 这与数组完全不同
#include <stdio.h>
#include <stdbool.h>
struct date {
int month;
int day;
int 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 = today.year + 1;
} else {
tomorrow.day = 1;
tomorrow.month = today.month + 1;
tomorrow.year = today.year;
}
printf ("Tomorrow'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;
}
分析:
- isLeap(struct date d);//判断是否是闰年
- &today.year):取成员优先级高,先去成员,在取地址
输入结构
- 没有直接的方式可以一次scanf一个结构
输入结构
- 没有直接的方式可以一次一个结构
如果我们打算直接写一个函数来读入结构
-
但是读入的结构如何送回来呢?
-
记住在函数调用时是传值的
- 所以函数中的与中的是不同的
- 在函数读入了的数值之后,没有任何东西回到,所以还是
解决的方案
之前的方案,把一个结构传入了函数,然后在函数中操作,但是没有返回回去
问题在于传入函数的是外面那个结构的克隆体,而不是指针传入结构和传入数组是不同的在这个输入函数中,完全可以创建一个临时的结构变量,然后把这个结构返回给调用者
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)