C语言提供了基本的数据结构,例如 char 、short 、int 、float....等类型;这些偶称为内置类型。怎样设计出来属于自己的类型?
程序员可以使用结构体来封装一些属性,设计出新的类型,在C语言中称为结构体类型。
目录
结构体定义
struct 结构体名{
成员列表(可以是基本的数据类型,指针,数组或其他结构类型)
};
struct 结构体名字 变量名字;
或者
typedef struct{
成员列表(可以是基本的数据类型,指针,数组或其他结构类型)
} 结构体名;
结构体名字 变量名字;
cpp
struct Date{
int year;
int month;
int day;
};
int main(){
struct Date a;
}
typedef相当于给结构体取了一个名字
cpp
typedef struct {
int year;
int month;
int day;
}Date;
int main(){
Date a;
}
结构体初始化
变量的初始化就看哪里声明了变量,声明的同时初始化就行。
cpp
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} ;
struct Books book = {"C 语言", "RUNOOB", "编程语言", 123456}
//或者
typedef struct
{
char title[50];
char author[50];
char subject[100];
int book_id;
}Books;
Books book = {"C 语言", "RUNOOB", "编程语言", 123456};
声明的语法为:用大括号括起来,用逗号分隔,然后根据变量的顺序依次赋值,注意每个初始化项目必须要和要初始化的结构体成员类型相匹配。
如果在定义结构体变量的时候没有初始化,那么后面就不能全部一起初始化了,意思就是:
cpp
struct Books book;
//这样是不允许的
book = {"C 语言", "RUNOOB", "编程语言", 123456};
另外,结构体可以和数组一样,全部初始化为0。
cpp
struct student stu = {0};
结构体的访问
为了访问结构的成员,我们使用成员访问运算符(.)
结构体变量名.成员名;
cpp
book.title = "JAVA 语言";
book.author = "NOGET";
book.subject = "另一种编程语言";
book.book_id = "789";
//如果其成员本身又是一种结构体类型,
//那么可以通过若干个成员运算符,一级一级的找到最低一级成员再对其进行操作;结构体变量名.成员.子成员.........最低一级子成员;