作者在 2011-09-09 16:04:48 发布以下内容
/*
时间:2011年9月9日15:02:27
目的:以学生成绩管理为例学习结构体使用的基本知识
要求:了解定义结构体的三种方法,掌握推荐使用的第一种
掌握结构体初始化和赋值的方法
熟练掌握取出结构体成员的两种方法
1. 变量名.成员名
2. 指针变量名->成员名 (这种更常用)
认真体会为什么两者等价
*/
# include <stdio.h>
//定义结构体的第一种方法,推荐使用
struct student //定义一个结构体,实际上是定义了一个叫struct student的复合数据类型
{
int age; //每个学生的信息包括很多内容,年龄、性别、分数等,单独定义变量很麻烦,所以创造一个新的数据类型
double score;
char sex;
}; //注意这里的分号;
//定义结构体的第二种方法
struct student2
{
int age;
double score;
char sex;
} zhao1; //定义的时候直接跟变量名,这种方式只能对zhao1变量使用一次,不好
//定义结构体的第3种方法
struct //省去结构体名,也是只能对qian2一个变量使用一次,不好
{
int age;
double score;
char sex;
} qian2;
int main(void)
{
//结构体赋值的第一种方法
struct student sun3 = {17, 88.5, 'M'}; //赋值可以在定义变量名的时候进行初始化,struct student是数据类型,相当于int,整个语句类似于int a[3] = {1,2,3};
printf("年龄:%d,性别:%c,成绩:%lf\n", sun3.age,sun3.sex,sun3.score); //输出年龄:17,性别:M,成绩:88.500000
//结构体赋值的第二种方法
struct student li4; //也可以先定义变量,再对变量赋值
li4.age = 18; //不过和数组的感觉一样,这时候不能整体赋值,而是对每一个成员进行赋值,注意格式为 变量名.成员名
li4.score = 93; //输入代码时的小技巧,定义完变量以后编译一下,之后在赋值时敲li4.,会自动输出成员名列表可供选择
li4.sex = 'F';
printf("年龄:%d,性别:%c,成绩:%lf\n", li4.age ,li4.sex ,li4.score ); //输出年龄:18,性别:F,成绩:93.000000
//取出结构体成员的第一种方法
struct student zhou5 = {17, 88.5, 'M'};
zhou5.score = 100; //上面的变量名.成员名 其实也是将结构体中每一个成员取出 单独赋值修改的第一种方法
printf("年龄:%d,性别:%c,成绩:%lf\n", zhou5.age,zhou5.sex,zhou5.score); // 年龄:17,性别:M,成绩:100.000000
//取出结构体成员的第二种方法
struct student * pzhou5 = &zhou5; //取出结构体中成员的另一种方法是使用指针,格式为指针变量名->成员名。这种方法更常用
pzhou5->age = 16; //这里的pzhou5->age,在系统里会被自动转化为(*pzhou5).age,这就是 -> 的含义
//所以 pzhou5->age 等价于 (*pzhou5).age 也等价于 zhou5.age
//pzhou5->age 的含义是 pzhou5 所指向的那个结构体变量 中的 age 这个成员
printf("年龄:%d,性别:%c,成绩:%lf\n", zhou5.age,zhou5.sex,zhou5.score); //输出 年龄:16,性别:M,成绩:100.000000
printf("年龄:%d,性别:%c,成绩:%lf\n", pzhou5->age,pzhou5->sex,pzhou5->score); //pzhou5->age和zhou5.age等价,在printf中写成哪种结果没有区别
return 0;
}
时间:2011年9月9日15:02:27
目的:以学生成绩管理为例学习结构体使用的基本知识
要求:了解定义结构体的三种方法,掌握推荐使用的第一种
掌握结构体初始化和赋值的方法
熟练掌握取出结构体成员的两种方法
1. 变量名.成员名
2. 指针变量名->成员名 (这种更常用)
认真体会为什么两者等价
*/
# include <stdio.h>
//定义结构体的第一种方法,推荐使用
struct student //定义一个结构体,实际上是定义了一个叫struct student的复合数据类型
{
int age; //每个学生的信息包括很多内容,年龄、性别、分数等,单独定义变量很麻烦,所以创造一个新的数据类型
double score;
char sex;
}; //注意这里的分号;
//定义结构体的第二种方法
struct student2
{
int age;
double score;
char sex;
} zhao1; //定义的时候直接跟变量名,这种方式只能对zhao1变量使用一次,不好
//定义结构体的第3种方法
struct //省去结构体名,也是只能对qian2一个变量使用一次,不好
{
int age;
double score;
char sex;
} qian2;
int main(void)
{
//结构体赋值的第一种方法
struct student sun3 = {17, 88.5, 'M'}; //赋值可以在定义变量名的时候进行初始化,struct student是数据类型,相当于int,整个语句类似于int a[3] = {1,2,3};
printf("年龄:%d,性别:%c,成绩:%lf\n", sun3.age,sun3.sex,sun3.score); //输出年龄:17,性别:M,成绩:88.500000
//结构体赋值的第二种方法
struct student li4; //也可以先定义变量,再对变量赋值
li4.age = 18; //不过和数组的感觉一样,这时候不能整体赋值,而是对每一个成员进行赋值,注意格式为 变量名.成员名
li4.score = 93; //输入代码时的小技巧,定义完变量以后编译一下,之后在赋值时敲li4.,会自动输出成员名列表可供选择
li4.sex = 'F';
printf("年龄:%d,性别:%c,成绩:%lf\n", li4.age ,li4.sex ,li4.score ); //输出年龄:18,性别:F,成绩:93.000000
//取出结构体成员的第一种方法
struct student zhou5 = {17, 88.5, 'M'};
zhou5.score = 100; //上面的变量名.成员名 其实也是将结构体中每一个成员取出 单独赋值修改的第一种方法
printf("年龄:%d,性别:%c,成绩:%lf\n", zhou5.age,zhou5.sex,zhou5.score); // 年龄:17,性别:M,成绩:100.000000
//取出结构体成员的第二种方法
struct student * pzhou5 = &zhou5; //取出结构体中成员的另一种方法是使用指针,格式为指针变量名->成员名。这种方法更常用
pzhou5->age = 16; //这里的pzhou5->age,在系统里会被自动转化为(*pzhou5).age,这就是 -> 的含义
//所以 pzhou5->age 等价于 (*pzhou5).age 也等价于 zhou5.age
//pzhou5->age 的含义是 pzhou5 所指向的那个结构体变量 中的 age 这个成员
printf("年龄:%d,性别:%c,成绩:%lf\n", zhou5.age,zhou5.sex,zhou5.score); //输出 年龄:16,性别:M,成绩:100.000000
printf("年龄:%d,性别:%c,成绩:%lf\n", pzhou5->age,pzhou5->sex,pzhou5->score); //pzhou5->age和zhou5.age等价,在printf中写成哪种结果没有区别
return 0;
}