一、定义结构体

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;
}

京公网安备 11010802030320号