前言结构体的声明
结构体的声明
结构体的声明示例 结构体的定义和初始化结构体成员的访问结构体传参
前言我们都知道C语言中有很多的数据类型,在使用的时候我们可以根据需要定义不同的数据类型。但是在实际生活中往往会遇到复杂的事物,这时候一个数据类型就不足以描述这个事物,所以就有结构来描述这些复杂的事物。所以结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。
结构体的声明 结构体的声明
struct tag //tag 表示结构名
{
member-list; //成员列表
}
variable-list; //变量列表
其中tag是结构名,struct tag 是类型名,在别处声明一个struct tag类型的变量时,注意不可以将struct省略,member-list是成员列表,可以有多个不同类型的变量,比如,标量(算术类型和指针类型)、数组,甚至可以是其他结构体。
结构体的声明示例struct Stu
{
char name[20]; //名字
int age; //年龄
char sex[5]; //性别
char id[20]; //学号
}Stu; //分号不能丢
如果觉得struct Stu这个类型名写得太麻烦,也可以使用typedefine关键字将这个类型名简化一下
struct Stu
{
char name[20]; //名字
int age; //年龄
char sex[5]; //性别
char id[20]; //学号
}Stu; //这时的Stu表示是类型名
Stu s1;
结构体的定义和初始化
结构体在初始化的时候可以类比一下数组,数组在定义的时候是用大括号 { } 括起来,结构体也是一样的。当结构体里面包含了一个结构体时,需要再使用一个大括号将被包含的数据括起来。
struct Point
{
int x;
int y;
}p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2
//初始化:定义变量的同时赋初值。
struct Point p3 = {x, y};
struct Stu //类型声明
{
char name[15];//名字
int age; //年龄
};
struct Stu s = {"zhangsan", 20};//初始化
struct Node
{
int data;
struct Point p;
struct Node* next;
}n1 = {10, {4,5}, NULL}; //结构体嵌套初始化
struct Node n2 = {20, {5, 6}, NULL};//结构体嵌套初始化
结构体成员的访问字符串使用 “ ” , 字符使用 ’ ’ 。
访问结构体的时候需要使用到结构体成员访问操作符:
如果是结构体变量,使用 结构体.结构体成员如果是结构体指针,使用结构体->结构体成员
结构体传参
函数传参的时候,我们都知道,如果将实参传过去的话是要将实参的内容全部拷贝一份,如果是结构体作为函数的参数的话,就会造成很大的空间浪费,所我们在进行结构体的传参的时候需要传结构体的地址,从而通过地址来访问结构体的成员,而不是将整个结构体传过去。
struct S {
int data[1000];
int num;
};
struct S s = {{1,2,3,4}, 1000};
//结构体传参
void print1(struct S s) {
printf("%dn", s.num);
}
//结构体地址传参
void print2(struct S* ps) {
printf("%dn", ps->num);
}
int main()
{
print1(s); //传结构体
print2(&s); //传地址【首选】
return 0; }



