1.结构体的声明:
i.结构体的基础知识:结构体是一些值的集合,这些值称为结构体的成员变量,这些值可以是不同类型的变量
(类似于数组:数组是同一类型变量的集合,而结构体可以是不同类型变量的集合)
struct stu//stu即结构的声明
{
//ii.内部成员可以是标量,数组,指针,甚至是其它结构体
char name[20];//char, int等即内部结构成员类型
int age; //name, age, tele, sex即内部结构成员名
char tele[15];
char sex[5];
};
struct peo//peo即结构体的声明
{
struct stu s2;//此处调用结构体,故应创建变量(对象)
int hight;//hight, weight即内部结构成员名
int weight;
};
void print1(struct stu* ps)//指针接收,通过地址找到地址所指向的对象
{
printf("%s %d %s %s\n", ps->name, ps->age, ps->tele, ps->sex);//结构体变量(对象)->结构体成员
}
void print2(struct stu ps)//此处为形参,实际是实参的一份临时拷贝,会在此再次开辟一份内存空间,占用更多的内存,大大降低运行效率,故传址优于传值
{
printf("%s %d %s %s\n", ps.name, ps.age, ps.tele, ps.sex);
}
int main()
{
struct stu s = { "张三", 18, "10086", "男"};//s为结构体变量(对象)创建,后面即初始化,可不完全不初始化
struct peo p = { {"李四", 19, "1008611", "女"}, 166, 120 };//p为结构体变量(对象)的创建
printf("%s %d %s %s\n", s.name, s.age, s.tele, s.sex);//对象.结构体成员
printf("%s %d %s %s %d %d\n", p.s2.name, p.s2.age, p.s2.tele, p.s2.sex, p.hight, p.weight);
print1(&s);//传址:直接将s这个变量(对象)的地址传递过去,不会开辟多一份内存空间,可以节省内存,提高运行效率
print2(s);//传值:此处为实参,将传递所有内容过去
return 0;
}