文章目录
参考文献:
浅析C++中结构体的定义、初始化和引用
结构体定义 typedef struct 用法详解和用法小结
定义
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。
解释
声明
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
}
定义变量
Student student1,student2;// 定义结构体类型变量student1和student2
在声明类型的同时定义变量
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
}student1,student2;//声明变量student1和student2
直接定义结构体类型变量(不常用)
struct { //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
}student1,student2;//声明变量student1和student2
结构体内定义函数(重要)
struct node {
int x, y;
bool operator < (const node&a, const node& b) const
{
return a.x > b.x; //结构体中,x小的优先级高
}
};
结构体变量的初始化
在结构体内定义初始化函数(重要)
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
在定义变量时进行初始化
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
};
Student student1={
<SPAN style="WHITE-SPACE: pre"> </SPAN> 10001,
<SPAN style="WHITE-SPACE: pre"> </SPAN> "qianshou",
<SPAN style="WHITE-SPACE: pre"> </SPAN> 'm',
<SPAN style="WHITE-SPACE: pre"> </SPAN> 19,
<SPAN style="WHITE-SPACE: pre"> </SPAN> "100",
<SPAN style="WHITE-SPACE: pre"> </SPAN> "JiNan"
<SPAN style="WHITE-SPACE: pre"> </SPAN> };
在定义结构体时对结构体变量指定初始值(不常用)
struct Student{ //声明一个结构体类型Student
int num; //声明一个整形变量num
char name[20]; //声明一个字符型数组name
char sex; //声明一个字符型变量sex
int age; //声明一个整形变量age
float score; //声明一个单精度型变量
char addr[30]; //声明一个字符型数组addr
} student1={
10001,
"qianshou",
'm',
19,
"100",
"JiNan"
};
结构体变量的引用
(1)引用结构体变量中的一个成员的值
引用方式:结构体变量名.成员名
其中“.”是成员运算符,它在所有的运算符中优先级最高。
如果一个成员本社也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。
(2)可以将一个结构体变量的值付给另外一个具有形同机构的结构体变量。
Student two={1,"qianshou",'m',19,10,01,1993,100,"JiNan"};
Student one=two;
(3)可以引用结构体变量的地址,也可以引用结构体变量成员的地址。
结构体定义typedef
- typedef可以声明新的类型名来代替已有的类型名,但却不能增加新的类型。
- typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
- 在编程中使用typedef目的一般有两个,一个是给变量提供一个易记且意义明确的新名字(类型有新别名,方便变量的定义),另一个是简化一些比较复杂的类型声明。
typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。
具体区别在于:
若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;
若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;
区别就在于使用时,是否可以省去struct这个关键字。
第一种:
struct node
{
int data; // 节点的数据域
struct node *next; // 节点的指针域
};
struct node n; // 定义一个单个节点
第二种:
struct node
{
int data; // 节点的数据域
struct node *next; // 节点的指针域
};
typedef struct node NODE; // 把struct node型的结构体用别名NODE表示
NODE n; // 定义一个单个节点
第三种:
typedef struct node
{
int data; // 节点的数据域
struct node *next; // 节点的指针域
}NODE;
NODE n; // 定义一个单个节点