结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以使不同类型的变量。
84 结构体类型的声明
结构体是由一批数据组合而成的一种新的数据类型。组成结构型数据的每个数据称为结构型数据的“成员”。该数据类型由一组称为成员(或称为域,或称为元素)的不同数据组成,其中每个成员可以具有不同的类型。结构体通常用来表示类型不同但是又相关的若干数据。
结构的成员可以是标量、数组、指针,甚至是其他结构体。
struct tag
{
member - list;
}variable-list;
//struct 结构体关键字 Stu-结构体标签 Struct Stu-结构体类型
struct Stu
{
//成员变量
char name[10];
short age;
char tele[12];
char sex[5];
}s1,s2,s3;//s1,s2,s3是三个全局的结构体变量(尽量少的使用全局变量)
typedef struct Stu
{
//成员变量
char name[10];
short age;
char tele[12];
char sex[5];
}Stu;//给struct Stu起了个别名Stu
int main()
{
struct Stu s1;//对象、局部的结构体变量
Stu s2;
return 0;
}
结构体初始化
结构体成员访问
struct B
{
char c;
short s;
double d;
};
struct Stu
{
//成员变量
struct B sb;
char name[20];//名字
int age;//年龄
char id[20];
} s1,s2;//s1和s2也是结构体变量
//s1,s2是全局变量
int main()
{
//s是局部变量
struct Stu s = { {'w', 20, 3.14}, "张三", 30, "202005034"};//对象
//初始化:定义变量的同时赋初值
//结构体成员访问 . ->
printf("%c\n", s.sb.c);
printf("%s\n", s.id);
struct Stu* ps = &s;
printf("%c\n", (*ps).sb.c);
printf("%c\n", ps->sb.c);
return 0;
}
结构体传参
struct B
{
char c;
short s;
double d;
};
struct Stu
{
//成员变量
struct B sb;
char name[20];//名字
int age;//年龄
char id[20];
};
void print1(struct Stu t)
{
printf("%c %d %lf %s %d %s\n", t.sb.c, t.sb.s, t.sb.d, t.name, t.age, t.id);
}
void print2(struct Stu* ps)
{
printf("%c %d %lf %s %d %s\n", ps->sb.c, ps->sb.s, ps->sb.d, ps->name, ps->age, ps->id);
}
int main()
{
//s是局部变量
struct Stu s = { {'w', 20, 3.14}, "张三", 30, "202005034" };//对象
//写一个函数打印s的内容
print1(s);//传值调用
print2(&s);//传址调用
return 0;
}
结构体传参的时候,要传结构体的地址。