结构体是什么
结构体是一些值的集合,值又叫做成员变量,结构体的每个成员可以是不同类型的变量。
结构体成员可以是标量,数组,指针,甚至是其他结构体。
结构体声明,初始化与成员访问。
struct [tag]
{
member-list
}[declarators];
//花括号内是成员列表,方括号内是变量列表。
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[8];//性别
float score;
}s1,s2,s3;
//s1,s2,s3即使通过struct Stu创建的变量。而且是全局变量。
struct Point
{
int x;
int y;
}p1 = {10, 15};
//创建的同时初始化。
struct S
{
char c;
struct Point sp;//结构体嵌套。
double d;
char arr[20];
};
void print1(struct S s)
{
printf("%c\n", s.c);
printf("%d %d\n", s.sp.x, s.sp.y);
printf("%lf\n", s.d);
printf("%s\n", s.arr);
}
//这种方式形参的空间占用过大。和结构体总体大小一致。
void print2(struct S* ps)
{
printf("%c\n", ps->c);
printf("%d %d\n", ps->sp.x, ps->sp.y);
printf("%lf\n", ps->d);
printf("%s\n", ps->arr);
}
//这种方式形参只会占用4/8个字节。所以通常用这种方式。
int main()
{
struct Point p = {100, 200};
struct S ss = { 'w', {100,20}, 5.5, "hello"};
//结构体初始化。
//ss.c = 'b';
//ss.sp.x = 1000;
//ss.sp.y= 2000;
//ss.d = 3.14;
//strcpy(ss.arr, "world");
//放置值。
print1(ss);//打印struct S类型的变量
print2(&ss);//
//结构体访问操作符:
//. 结构体变量.结构体成员。
//-> 结构体指针->结构体成员。
return 0;
}
typedef
用于类型重命名/重定义。
typedef struct Stu Stu;
结构体类型的声明
typedef struct Stu
{
char name[20];//名字
int age;//年龄
char sex[8];//性别
float score;
}Stu;
//这里的Stu是把结构体重命名成Stu。
int main()
{
struct Stu s4;
struct Stu s5;
Stu s6;
//这样就可以省略struct。
return 0;
}