一、定义结构体
struct是C语言中的一种复合数据类型,用于将不同类型的数据组织在一起形成一个新的数据类型。结构体定义的基本语法如下:
struct 结构体名{ 数据类型1 成员变量名1; 数据类型2 成员变量名2; …… };
在定义结构体时,需要指定结构体的名称和每个成员变量的名称和数据类型。举个例子:
struct Student { char name[20]; int age; char gender; };
这个示例定义了一个名为Student的结构体,包含了三个成员变量:name、age、gender。name是一个长度为20的字符数组,age是一个整型,gender是一个字符型。这样一来,我们就可以定义一个名为stu的变量,这个变量就是Student类型的了:
struct Student stu;
二、结构体初始化
结构体定义后,可以单独为每个成员变量赋值,也可以使用结构体初始化方式为整个结构体赋值。
使用结构体初始化的方式需要按照顺序,为每个成员变量提供一个初始值,使用花括号括起来。如果不想为结构体的所有成员变量赋值,可以使用“{}”或“{0}”来表示剩余成员变量的默认值。示例代码:
struct Student stu1 = {"Tom", 18, 'M'}; struct Student stu2 = {.name="Jerry", .gender='F'}; struct Student stu3 = {0};
三、引用结构体成员
访问结构体中的成员变量需要使用“.”运算符。示例代码:
struct Student stu; strcpy(stu.name, "Michael"); stu.age = 20; stu.gender = 'M'; printf("%s,%d,%c\n", stu.name, stu.age, stu.gender);
四、结构体作为函数参数
可以把结构体作为函数的参数传递给函数来进行操作,有两种传递方式:传值和传指针。
结构体传值:
struct Student { char name[20]; int age; }; void printStudent(struct Student stu){ printf("%s,%d\n",stu.name,stu.age); } int main(){ struct Student stu = {"Tom", 18}; printStudent(stu); //Tom,18 return 0; }
结构体传指针:
void changeStudent(struct Student* stu, char* name, int age){ strcpy(stu->name, name); stu->age = age; } int main(){ struct Student stu = {"Tom", 18}; changeStudent(&stu, "Jim", 20); printf("%s,%d\n",stu.name,stu.age); //Jim,20 return 0; }
五、结构体数组
可以使用结构体数组来一次定义多个结构体变量。示例代码:
struct Student{ char name[20]; int age; char gender; }; int main(){ struct Student stu[3] = { {"Tom",18,'M'}, {"Jerry",17,'F'}, {"Mike",19,'M'} }; return 0; }
六、结构体嵌套
可以将一个结构体嵌套在另一个结构体中。示例代码:
struct Date{ int year; int month; int day; }; struct Student{ char name[20]; int age; struct Date birthday; }; int main(){ struct Student stu = {"Tom", 18, {2000,9,1}}; printf("%s,%d,%d-%d-%d\n",stu.name,stu.age,stu.birthday.year,stu.birthday.month,stu.birthday.day); return 0; }
七、typedef定义结构体别名
可以使用typedef关键字为结构体定义一个别名。示例代码:
typedef struct Customer{ char name[20]; int age; }Custom; int main(){ Custom cus = {.name="Tom",.age=18}; printf("%s,%d\n",cus.name,cus.age); return 0; }