什么是结构体,结构体怎么来的
结构体是一些值的集合,是用户自定义的类型。里面包含了一些值,这些值被称为成员变量。结构体的每个成员变量可以是不同类型的变量。
结构体的关键字是 struct ,结构体的大括号后面一定要有分号。
结构体的创建
现在创建一个学生的结构体:有年龄,名字,id 。并且对其赋初值
struct Stu
{
int age;
char name[20];
int id;
};
int main()
{
struct Stu s = { 18,"张三",201202203 };
return 0;
}
通过创建结构体类型,然后在 main 函数里面对其初始化,初始化的时候先创建一个结构体变量。这里创建的结构体变量就是 s ,然后大括号初始化,每个变量之间用逗号隔开。
当然,结构体变量也可以创建在 main 函数外面:
struct Stu
{
int age;
char name[20];
int id;
};
struct Stu s = { 18,"张三",201202203 };
这样创建的结构体变量也可以被访问到。
也可以通过 typedef 对结构体的访问方式进行重定义。
typedef struct Stu
{
int age;
char name[20];
int id;
}stu; //通过 typedef 把 struct Stu 定义为 stu
int main()
{
struct Stu s = { 18,"张三",201202203 }; //这个是通过结构体创建的
stu s = { 18,"张三",201202203 }; //这个是通过 typedef 重定义创建的
return 0;
}
也可以之间在创建结构体的时候创建出结构体变量
struct Stu
{
int age;
char name[20];
int id;
}p1;
这就是在结构体创建的时候直接创建出结构体变量,这里创建的结构体变量是可以直接使用的。
结构体的输出
main函数内使用结构体
结构体输出内容也就是访问结构体,访问结构体的方法是:结构体变量.结构体成员。就拿上面的这个结构体来举例。
struct Stu
{
int age;
char name[20];
int id;
};
int main()
{
struct Stu s = { 18,"张三",201202203 };
printf("%d %s %d\n", s.age, s.name, s.id);
return 0;
}
这里就是通过 “.” 来访问结构体成员
结构体传参
可以把结构体当作一个参数来使用,因为是结构体类型,所以接收结构体参数的时候,可以拿结构体来接收,也可以拿结构体指针来接收。拿结构体指针来接收更好一些,因为这里有一个压栈(函数栈帧)的过程。如果是值传递的话,就对栈区的消耗过大,所以使用指针传递,能有效的提高性能。
void print1(struct Stu s) //值传递方式
{
printf("%d\n", s.age);
printf("%s\n", s.name);
printf("%d\n", s.id);
}
void print2(struct Stu* s) //指针传参方式
{
printf("%d\n", s->age);
printf("%s\n", s->name);
printf("%d\n", s->id);
}
int main()
{
struct Stu s = { 18,"张三",201202203 };
print1(s);
print2(&s);
return 0;
}
都能有效输出结果,但我们使用结构体的时候还是传地址,使用指针更好一些,为了提升性能。