目录
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
例如常见的:int char,long.....
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是全局变量
结构的成员可以是标量、数组、指针,甚至是其他结构体。
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;
//}
//
//. 结构体变量.结构体成员
//-> 结构体指针->结构体成员
- 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;
- }
函数传参的时候,参数是需要压栈的。(这部分内容我会在后续文章中讲到)。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的
下降。