目录
1. 结构体的声明
1.1 结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
例如常见的:int char,long.....
1.2 结构的声明
struct tag
{
member-list;
}variable-list;举两个例子
typedef struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}Stu;//记住分号不能丢
结构体类型的声明
//struct Stu
//{
// char name[20];//名字
// int age;//年龄
// char sex[8];//性别
// float score;
//}s1,s2,s3;
s1,s2,s3是通过struct Stu类型创建的变量
s1,s2,s3是全局变量
1.3 结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体。
1.4 结构体变量的定义和初始化
edef 类型重定义/重命名,也就是取别名
//结构体类型的声明
//typedef struct Stu
//{
// char name[20];//名字
// int age;//年龄
// char sex[8];//性别
// float score;
// }Stu;
//
//int main()
//{
// //s4,s5是局部变量
// //struct Stu 才是结构体类型,不能随便省略struct
//
// struct Stu s4;
// struct Stu s5;
// Stu s6;
//
// return 0;
//}
//
2. 结构体成员的访问与传参
//. 结构体变量.结构体成员
//-> 结构体指针->结构体成员
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);
}
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");//strcpy字符串拷贝
print1(ss);//打印struct S类型的变量
print2(&ss);//
return 0;
}
函数传参的时候,参数是需要压栈的。(这部分内容我会在后续文章中讲到)。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的
下降。