1.定义结构体类型变量的方法
- 先定义结构体类型,再定义结构体变量。
struct 结构体名 {
成员列表
};
struct 结构体名 变量名;- 在定义结构体类型的同时定义结构体变量。
struct 结构体名 {
成员列表
} 变量名;- 直接定义结构体变量。
struct {
成员列表
} 变量名;
结构体变量的定义需要遵循结构体类型的定义规则,成员的类型和顺序必须与结构体类型的定义一致。同时,结构体变量可以通过成员运算符“.”来访问成员变量。
2.结构体变量的引用
结构体变量的引用包括以下几种方式:
- 通过结构体变量名和成员运算符“.”来访问成员,例如:
struct Student s1; s1.id = 1; strcpy(s1.name, "zhangsan");
- 可以使用指针来引用结构体变量,通过指针和“->”运算符来访问成员,例如:
struct Student *p; p = &stu; p->id = 2; strcpy(p->name, "wangdefa");
- 可以将结构体变量作为函数的参数进行传递,在函数内部通过成员运算符或“->”运算符来访问成员。
- 也可以从函数中返回结构体变量。
在引用结构体变量时,要确保结构体变量已经被正确定义和初始化,并且成员的访问方式要符合结构体的定义。
3.结构体变量的初始化
1.在定义结构体变量时进行初始化。例如:
struct Student {
int id;
char name[20];
float score;
};
struct Student s1 = {1, "wang", 90.5};
在上述例子中,结构体变量s1
的成员id
被初始化为1
,成员name
被初始化为"wang"
,成员score
被初始化为90.5
。
2.使用花括号{}
对结构体变量进行初始化。例如:
struct Student s2 = {
.id = 2,
.name = "zhang",
.score = 85.0
};
在上述例子中,使用了点运算符.
来指定成员并进行初始化。
3.对于结构体数组,可以逐个对数组元素进行初始化。例如:
struct Student stuArr[3] = {
{1, "zhang", 90.5},
{2, "li", 85.0},
{3, "wang", 95.0}
};
在上述例子中,结构体数组stuArr
的三个元素分别被初始化为不同的值。
在进行初始化时,要确保初始化的值与结构体成员的类型相匹配,并且按照结构体成员的定义顺序进行赋值。如果某些成员没有被显式初始化,它们将被初始化为默认值(例如,整数成员为0
,字符数组成员为'\0'
等)。
4.指向结构体数据类型的指针
指向结构体数据类型的指针是一种特殊的指针,它指向结构体变量或结构体数组的地址。通过指向结构体的指针,可以方便地访问结构体中的成员。例如:
#include <stdio.h>
struct Student {
int id;
char name[20];
float score;
};
int main() {
struct Student s1 = {1, "wang", 90.5};
struct Student *p = &s1;
// 通过指针访问结构体成员
printf("ID: %d\n", p->id);
printf("Name: %s\n", p->name);
printf("Score: %.1f\n", p->score);
return 0;
}
在上述代码中,定义了一个结构体Student
,包含成员id
、name
和score
。然后,定义了一个结构体变量s1
,并初始化了它的成员。接着,定义了一个指向结构体的指针p
,并将其指向s1
的地址。
通过指针p
,可以使用->
运算符来访问结构体成员,例如p->id
、p->name
和p->score
。这样,就可以通过指针来操作结构体变量,而不需要直接使用结构体变量的名称。
5.用指针处理链表
链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
createNode
函数用于创建一个新的链表节点,并分配内存。
insertAtHead
函数用于将一个新节点插入到链表的头部。
printList
函数用于打印链表中的所有节点数据。
freeList
函数用于释放链表占用的内存。