18-1 概念
我们现在已经知道的数据类型:
char short int long float double
但是当我们需要描述一个复杂对象时,这些数据类型单独拿出来不能满足,如:
人:名字+年龄+性别+地址+电话
书:书名+作者+出版社+定价+书号
所以,C语言就给了自定义类型的能力,自定义类型中有一种叫:结构体struct
结构体是把一些单一类型组合在一起的做法:
struct Stu //学生
{char name[20]; //名字int age; //年龄char sex[10]; //性别char tele[12]; //电话号码
};
struct Stu占空间吗?
并不占空间,这里的struct Stu实质上就是个类型,只有:
struct Stu s;
创建该类型的变量的时候才占空间
18-2 结构体的初始化
创建并初始化:
struct Stu
{char name[20];int age;char sex[10];char tele[12];
};
int main()
{struct Stu s = { "zhangsan",20,"nan","15596668862" };return 0;
}
18-3 操作符.和->
在此,我们可以讲一下之前跳过的操作符.和->了
18-3-1 .
使用前提:有结构体对象
访问结构体对象的成员:结构体对象.成员名:s.name/s.age/ s.sex/ s.tele
struct Stu
{char name[20];int age;char sex[10];char tele[12];
};
int main()
{struct Stu s = { "zhangsan",20,"nan","15596668862" };printf("%s %d %s %s\n", s.name, s.age, s.sex, s.tele);return 0;
}
运行结果:
当然,只要打印的类型与结构体对象的成员对应,顺序可以改变
18-3-2 ->
使用前提:有地址/指针
结构体指针变量->成员名:ps->name/ps->age/ps->sex/ ps->tele
struct Stu
{char name[20];int age;char sex[10];char tele[12];
};
void print(struct Stu* ps)
{printf("%s %d %d %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).tele);printf("%s %d %d %s\n", ps->name, ps->age, ps->sex, ps->tele);
}
int main()
{struct Stu s = { "zhangsan",20,"nan","15596668862" };print(&s);return 0;
}
运行结果: