该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。
萌新的学习笔记,写错了恳请斧正。
结构体是 C 语言中的一种特殊的数据类型,它是自定义的,可以由程序员自己定义。
结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如:
标量、数组、指针,甚至是其他结构体。
# 结构的声明
struct tag | |
{ | |
member-list; | |
} variable-list; |
其中 tag 是结构的名字,由我们自定义
member-list 就是成员列表,用于定义结构体的成员变量
variable-list 是变量列表,用于在定义结构时同时定义一个或多个变量 (可以省略)
这段定义不用放在主函数里面,和定义函数一样和主函数平行放置即可
光看这些可能会感觉很抽象不能理解,那我们来看几个例子:
- 描述学生的结构体
struct Stu | |
{ | |
char name[20]; // 名字 | |
int age; // 年龄 | |
char sex[5]; // 性别 | |
char id[10]; // 学号 | |
}; |
- 描述复数的结构体
struct Complex | |
{ | |
int Re; // 实部 | |
int Im; // 虚部 | |
}; |
# 结构体变量的定义与初始化
// 变量的定义 | |
struct Point | |
{ | |
int x; | |
int y; | |
} p1; // 声明类型的同时定义变量 p1 | |
struct Point p2; // 定义结构体变量 p2 | |
// 初始化 | |
struct Point p3 = {10, 20}; // 其中的内容按顺序与结构体成员列表一一对应 | |
struct Stu | |
{ | |
int age; // 名字 | |
char name[15];// 年龄 | |
}; | |
struct Stu s1 = {"zhangsan", 20};// 初始化 | |
struct Stu s2 = {.age=20, .};// 指定顺序初始化 | |
// 结构体嵌套初始化 | |
struct Node | |
{ | |
int data; | |
struct Point p; | |
struct Node* next; // 指针变量,暂时不要管 | |
} n1 = {10, {4,5}, NULL}; | |
struct Node n2 = {20, {5, 6}, NULL}; |
# 结构成员访问操作符
# 结构体直接访问
结构体成员的直接访问是通过点操作符 (.) 访问的
点操作符接受两个操作数,用法为 “结构体。成员”, 如下所示:
#include <stdio.h> | |
struct Point | |
{ | |
int x; | |
int y; | |
} p = {1,2}; | |
int main() | |
{ | |
printf("x: %d y: %d\n", p.x, p.y); | |
return 0; | |
} |
通过结构成员访问操作符可以获取结构体中特定的成员
# 结构体间接访问
有的时候我们只能使用一个指向结构体的指针 (结构体的内存地址)
那我们怎么通过这个指针来访问我们的结构体的特定成员呢?
我们可以使用 “->” 操作符,用法为 “结构体指针 -> 成员”, 如下所示:
#include <stdio.h> | |
struct Point | |
{ | |
int x; | |
int y; | |
}; | |
int main() | |
{ | |
struct Point poi = {3, 4}; | |
struct Point *p = &poi; | |
p->x = 10; | |
p->y = 20; | |
printf("x = %d y = %d\n", p->x, p->y); | |
return 0; | |
} |
更多关于结构体的内容后面再讲。