C语言 结构体
1.结构体的声明
1.1结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
复杂对象:
人:名字+电话+性别+身高
书:书名+作者+定价+书号
复杂对象的描述就会使用到,结构体
1.2结构体的声明
struct tag
{
member-list;
}variablelist;
//人
//声明的结构体类型struct peo
struct peo
{
//成员变量
char name[20];
char tele[12];
char sex[5];//女 男 保密
int high;
};
int main()
{
return 0;
}
1.3结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体
struct peo
{
char name[20];
char tele[12];
char sex[5];//女 男 保密
int high;
};
struct st
{
struct peo p;
int num;
float f;
};
1.4结构体变量的定义和初始化
定义:
初始化:
2.结构体成员的访问:
void printf2(struct peo* sp)
{
printf("%s %s %s %d\n", sp->name, sp->tele, sp->sex, sp->high);//结构体指针->成员变量
}
void printf1(struct peo p)
{
printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);//结构体指针.成员变量
}
3.结构体传参
struct s
{
int data[1000];
int num;
};
struct S s = { { 1, 2, 3, 4 }, 1000 };
//结构体传参
void print1(struct S s)
{
printf("%d\n", s.num);
}
//结构体地址传参
void printf2(struct S* ps)
{
printf("%d\n", ps->num);
}
int main()
{
printf1(s);//传结构体
printf2(&s);//传地址
return 0;
}
上面的printf1和printf2函数那个好用
答案是:首选printf2函数
原因:函数传参时,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。
结论:
结构体传参的时候,要传结构体的地址