结构体
1、结构体类型的声明
结构体是一些值的集合,这些值称为成员变量。
结构体的每个成员可以是不同类型的变量。
结构体的声明:
#include <stdio.h>
struct Book
{
char name[5];
int id;
float price;
};
struct Student
{
struct Book book;
//成员变量
char name[20];
int age;
char sex[5];
} s1, s2; //s1和s2也是结构体变量,不过是全局变量
int main()
{
struct Student s; //创建对象,局部变量
return 0;
}
结构体成员的类型:可以是标量、数组、指针,甚至是其他结构体。
2、结构体初始化
struct Student s = {{"book", 12345, 88.88}, "lisa", 18, "female"};
3、结构体成员访问
用.和->访问
printf("%s\n", s.book.name);
struct Student *ps = &s;
printf("%s\n", (*ps).name);
printf("%s\n", ps->name);
4、结构体传参
void print1(struct Student t)
{
printf("%s %d %lf %s %d %s\n", t.book.name, t.book.id, t.book.price, t.name, t.age, t.sex);
}
void print2(struct Student *ps)
{
printf("%s %d %lf %s %d %s\n", ps->book.name, ps->book.id, ps->book.price, ps->name, ps->age, ps->sex);
}
int main()
{
//写一个函数打印s里的内容
print1(s); //传值调用
print2(&s); //传址调用--效率高,节约空间,可以改s中的数据
//首选print2函数,原因:函数传参的时候,参数需要压栈。如果传递一个结构体对象,结构体过大,参数压栈的系统开销比较大,导致性能的下降
//结论:结构体传参的时候,要传递结构体的地址
}