数据封装——结构体

523 阅读2分钟

结构体的定义

struct {
argument;
};
其中argumengt中的变量定义可以和结构体外的变量定义相同。

结构体变量的定义

在定义了结构体之后,就可以把结构体看成是一种变量来进行定义。
struct Student{
char *name;
int age;
char sex;
};
Student student;
Student student_arr[10];
Student *student_pointer;
一旦定义了一个结构体变量,那么系统将会分配一块连续的内存来存储这个结构体,这块连续的空间的名称就是结构体的名称,结构体内部的每一个字段也有自己单独的名称。
结构体变量的定义还可以在定义结构体的时候就完成定义。
struct Student{
char *name;
int age;
char sex;
}student;
struct {
char *name;
int age;
char sex;
} student;
第一种定义方式在于同时定义了结构体和结构体变量,第二种方式只能定义结构体变量。
结构体变量的赋值需要通过数组来进行。
char *name="张三";
Student={name,"20","男"};

结构体变量的使用

结构体变量一般不能进行加减乘除运算,点运算是结构体变量最主要的访问方法。
前面提到一个结构体指针在这里就得提一下点运算和指针运算的优先级。
Student student,*pointer;
pointer=&student;
(*pointer).age=10;
点运算的优先级是要比指针运算的优先级高的。
在使用结构体指针的时候,C++提供了一种更加便捷的方式:"->"
比如上面的代码,要访问pointer指向的结构体的成员:
pointer->age=10;

结构体的应用——单链表

单链表的存储
存储一个单链表只需要存储表头的地址就可以,因为可以通过表头迭代去访问到单链表的每一个结点。而单链表的节点元素就可以定义成结构体类型的变量,其中含有两个成员,一个是待存储的数据,这个数据可以是任意的类型;另一个元素是指向下一个节点(结构体)的结构体指针。
struct LinkNode{
datatype data;
LinkNode *next;
};