文章目录
前言
c语言是比较底层的一门语言,不像其他语言一般面向对象,而更多的是面向过程。倘若一定要面向对象,或者是编写链表等数据结构,结构体是必须要学好的一部分!!
一、结构体的定义
什么是结构体
数组是由相同类型的数据构成的一种数据结构,适用于对相同属性的数据进行处理。
而结构体是将不同类型的数据成员组织到统一的名字之下。在数据库管理中得到了广泛作用。
结构体变量的定义
struct//结构体名
{
数据类型 成员1的名字
数据类型 成员2的名字
......
数据类型 成员n的名字
};//注意,这里有一个分号
首先,我们需要明白,结构体一种数据类型,在这个数据类型中包含很多结构体成员,这些结构体成员也可以是各种类型的,如int,char等类型。
但是结构体模板只是生命力一种数据类型,并没声明结构体类型的变量(结构体变量将在下文介绍
定义一个完整的结构体
先声明结构体模板,再定义结构体变量
struct student
{
long studengID;
char studentName[10];
char studentSex;
int yearOfBirth;
int score[4];
}stu1;//注意,结构体变量的名字写在最后,并且要打分号!
注意,结构体变量的名字写在最后,并且要打分号!
用typedef定义数据类型
关键词typedef用于系统固有程序员自定义的数据类型定义的一个别名。
typedef int INTEGER;
typedef的作用实际上是为int定义了一个新的名字,从此int用INTEGER来表示
typedef可以用在结构体前面
typedef struct student
{
long studentID;
char studentName[10];
char studentSex;
int yearOfBirth;
int score[4];
}STUDENT;
本来需要struct student来定义某结构体对象(可以与java中的类作类比),由于有了typedef,所以可以直接用STUDENT来定义结构体对象。
结构体对象的初始化
例如上面的结构体,我们对它进行初始化
STUDENT stu1={100310121,"王刚",'M',1991,{72,83,90,82}}
中间有数组成分,则在里面进行正常初始化即可
二,嵌套结构体
嵌套结构体就是在一个结构体内包含了另一个结构体作为成员
typedef student date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
long studentID;
char studengName[10];
char studentSex;
DATE birthday;
int score[4];
}STUDENT;
结构体变量的引用
点运算符
结构体变量名.成员名;
typedef student date
{
int year;
int month;
int day;
}DATE;
就比如
DATE stu1;
stu1.day=5;//stu1这个对象所对应的day是5
嵌套结构体的引用
当出现结构体嵌套时,必须以级联方式访问结构体成员,即通过成员选择运算符逐级找到最底层的成员时再引用
例如:
typedef student date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
long studentID;
char studengName[10];
char studentSex;
DATE birthday;
int score[4];
}STUDENT;
此结构体嵌套联级引用
DATE stu1;
stu1.birthday.year=1991;
stu1.birthday.month=5;
stu1.birthday.day=19;
三,对数组进行赋值
c语言允许对具有相同结构体类型的变量进行赋值。
例如:
stu1.studentID=stu2.studentID;
并非所有的结构体成员都是可以使用赋值运算符来赋值,对字符数组类型的结构体成员进行赋值时,必须使用字符串处理函数strcpy()
例如:(姓名是一个字符数组)
strcpy(stu1.studentName,"王刚");
四,结构体数组
结构体数组的定义
一个结构体变量只能表示学生成绩管理表中的一个学生的记录信息,代表其中一个实例,而数据库中有多个学生记录,结构体数组就可以表示这么多据欧相同结构的学生记录。
定义
STUDENT stu[30];
结构体数组的初始化
直接赋值即可
如:
STUDENT stu[30]={{100310121,"王刚",'M',{1991,5,19},{72,83,90,82}},
{{100310122,"李小明",'M',{1992,8,20},{88,92,78,78}}
};
中间用逗号隔开,并且最后的那个结构体成员后面不打逗号,只需要再加一个括号即可
五,结构体指针
结构体指针定义及初始化
STUDENT *pt;
pt=&stu1;
//或者
STUDENT *pt=&stu1;
指向运算符
指向运算符又称箭头运算符
指向结构体的指针变量名->成员名
例如
pt->studentID=100310121
//或者
(*pt).sudentID=100310121;
嵌套结构体指针
pt->birthday.year=1991;
pt->birthday.month=5;
pt->birthday.day=19;