目录
结构:结构是一些值的集合,这些值称为成员变量
eg:数组是一种相同元素的集合,而结构不是
int、float等类型为内置类型,而当我们需要描述一个复杂对象时,用一个简单类型显然不够方便,结构体的出现就是为了描述复杂对象
一、结构体的声明
1、结构体的声明
//声明一个名为person的结构体
struct prson
{
char name[20];
char tele[20];
char sex[10];
int height;
}p1, p2;//这里的分号不能去掉,分号前面可加可不加变量名(如果有多个对象,则可以在这里加)
//如果需要有多个对象,则需要加对象名
//这里p1和p2是使用person结构体创建的变量,且为全局变量,因此不推荐在此创建
结构体成员可以是变量、数组、指针等,甚至是另一个结构体(注意:如果包含了其它结构体,那么引用的结构体需要先被创建)
2、结构体变量的定义和初始化
struct person
{
char name[20];
char tele[20];
char sex[10];
int height;
};
struct student
{
struct person;//这里可以不加结构名,如果加了(比如p3),后面访问的时候要带上结构名
int No;
float grade;
};
int main()
{
struct person p1 = { "zhangsan","123456789123","male",180 };
//结构体变量的创建和初始化
struct student p2 = { {"lisi","987654321123","female",170},02,200.0 };
//里面的大括号可以去掉
//含有结构体的结构体变量的创建和初始化
//注意:浮点数在内存中不能精确保存,可能会有误差
return 0;
}
也可以不完全初始化(即只初始化一部分内容)
二、结构体成员的访问
1、用点操作符(.)访问
printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.height);
printf("%s %s %s %d %d %.2f\n", p2.name, p2.tele, p2.sex, p2.height, p2.No, p2.grade);
//如果上面在引用另一个结构体的时候写了变量名(比如p3),这里要加上,如p2.p3.name
printf("%s %s %s %d %d %.2f\n", p2.p.name, p2.p.tele, p2.p.sex, p2.p.height, p2.No, p2.grade);
2、用指针访问
//接收传过来的地址
void print2(struct person* p)
{
printf("%s %s %s %d", p->name, p->tele, p->sex, p->height);
}
如果在调用函数时括号内放参数名,而不是地址,则需要用形参接收,用(.)访问
结构体传参:
结构体传参,可以用传结构体和传地址的形式,但一般用传地址的形式
当结构体所占空间比较大的时候,传结构体会造成空间和时间(拷贝结构体需要时间)的浪费