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;
}
运行结果: