一、结构体声明
1、结构体声明位置:在main函数上面
声明语法:
struct 结构体类型名称{
数据类型 成员变量名;
数据类型 成员变量名;
数据类型 成员变量名[ ];
……
};
例:声明描述学生的结构体:学号、姓名、性别、分数
struct student {
int number;
char name[20];
char sex;
float score;
};
注:
每一个结构体当中声明的变量,称为成员变量;
在结构体内声明的成员变量的顺序可以任意;
成员变量的类型可以任意,根据自己的需求,可以是数组,也可以是结构体类型。
二、结构体定义和赋值
1、结构体定义在main函数下面
语法:
struct 结构体类型名称 结构体变量名称 = {对结构体成员变量按声明的顺序依次赋值,用逗号隔开};
例:对声明的struct student 类型声明变量:
设置初始值的顺序必须与声明变量的顺序保持一致
struct student stu1= {1, "zhangsan", 'f', 99.5};
struct student stu2= {2, "lisi", 'm', 99.4};
如果没有初值,则全部初始为0,和数组中的方法一样:
struct student stu3= {0};
如果是某个初始值不赋值的话则在对应的位置赋值0.
2、相同类型的结构体变量之间(不同名称)可以相互直接赋值
struct student stu4= stu1;
3、结构体变量定义后,不能再使用{}整体赋值,应采用如下的方式,逐个赋值。
给stu3的成员变量赋值(用到结构体访问的知识)
stu3.number = 3;
strcpy(stu3.name,"wangwu");// 字符串赋值使用字符串拷贝函数strcpy( );
stu3.sex = 'm';
stu3.score = 95.5;
4、重要概念理解
结构体类型:
声明结构体类型时,跟在struct后面的名称,称为结构体类型,而不是变量名。在使用是和struct一起连用,组成新的类型:结构体类型。如:struct student是一个结构体类型,使用这个类型就默认包含成员number,name[20],sex,score。结构体类型和基本数据类型的用法和功能一致。
结构体变量:
用结构体类型定义的变量称为结构体变量。它包含的成员类型和数量和结构体声明的成员是一致的。如:stu1、stu2等称为结构体变量,都包含的成员有number,name[20],sex,score。
成员变量:
声明结构体的时候就声明了这个结构体类型包含的成员变量。如:struct student结构体类型包含的成员变量是:number,name[20],sex,score。
三、结构体的访问
访问结构体的成员变量
语法:结构体变量名.成员变量名
成员变量和基本数据类型的变量一样使用,可以参与运算
例:打印第一个学生的所有信息
printf("%d\n",stu1.number);
printf("%s\n",stu1.name);
printf("%c\n",stu1.sex);
printf("%.2f\n",stu1.score);
从控制台输入数据,存储在成员变量中
printf("Pleaseenter number:\n");
scanf("%d",&stu2.number);
注:优先级 . 高于 &
四、包含结构体成员的结构体
声明结构体时,结构体的成员类型可以是之前已经声明过的结构体类型。
如:定义一个person的结构体,包括姓名,性别,出生年月。
1、先声明一个出生年月的结构体
struct date{
int year;
int month;
int day;
};
typedef struct dateMyDate;
2、在声明人的结构体中包含已经声明的date结构体:姓名 性别 出生日期
struct person{
char name[20];
char sex;
MyDate birthday;
};
typedef structperson Person;
3、对包含结构体成员变量的结构体赋值时,结构体成员的赋值要使用{ }。
Person p1 = {"zhangsan", 'm',{2011, 11, 28}};
4、访问包含结构体成员变量的结构体
打印名字
printf("%s\n", p1.name);
打印出生年份
printf("%d\n", p1.birthday.year);
修改出生月份
p1.birthday.month = 10;
printf("%d\n", p1.birthday.month);
语法:结构体类型变量名.结构体类型成员变量名.成员变量名
五、typedef的使用
语法:typedef 原类型名 新类型名
typedef的作用:给数据类型重命名,类似于起别名。
如: typedef int Integer;
Integer a = 10;等同于 int a = 10;
同样的为了简化代码,使用typedef给结构体重命名,可以大大增加代码的灵活性和使用的便利性。
如:typedef structstudent Student;
重新起的结构体的名字首字母大写,易于区分。这时Student和struct student是同一个结构体类型的两个名字,作用是等同的,都是包含同样成员变量的结构体类型。使用Student会比struct student更方便。
使用typedef的方法:
1、分开使用
如:声明描述点的结构体
struct cpoint {
float x;
float y;
};
typedef structcpoint CPoint;
2、在一句代码中合并使用
如:声明描述老师的结构体,一句代码完成typedef声明和创建
typedef structteacher{
char name[20];
char sex;
int age;
}Teacher;