目录
- struct 结构体类型
- {
- //相关属性;
- }结构体变量;
结构体和数组不同,同一类型的数据的集合是数组;
结构体是多种类型的数据的集合;
在平常生活中,我们记录一个一个学生的信息,往往是每人一张信息卡,这里面记录了名字,身高等信息,这些不是简单的整型,数组就能解决的。像这种卡片形式的数据结构是通过结构体(struct)实现的。
- struct Stu
- {
- //定义学生相关属性
- char name[0];
- int age;
- }s3,s4;
- //s3,s4,是结构体类型Stu的变量名字
- // s3,s4是全局变量
结构的成员可以是标量、数组、指针,甚至是其他结构体。
- struct str
- {
- int x;
- int y;
- }s1; //声明类型的同时定义变量s1
- struct str s2; //定义结构体变量s2
同样可以对其赋值,采用{}的形式
- struct str
- {
- int age;
- char name[20];
- };
- struct str s1 = {18,"zhangsan"};
-
- struct student
- {
- int num;
- char name[10];
- };
- int main()
- {
- struct student s1;
- struct student s2;
- return 0;
- }
总结:
👍结构体类型定义的末尾必须有分号;
👍成员类型可以是除本身所属结构体类型外的任何已有数据类型;
👍在同一作用域内,结构体类型名不能与其他变量名或结构体类型名重名;
👍结构体类型的作用域与普通变量的作用域相同:在函数内定义,则仅在函数内部起作用;在函数外定义,则有全局作用;
👍结构体变量访问成员 结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数
- struct student
- {
- int age;
- char name[20];
- int score;
- }stu1 = {20,"zhangsan",60};
-
- int main()
- {
- printf("%s %d", stu1.name, stu1.age);
- return 0;
- }
有时候我们得到的不是一个结构体变量,而是一个结构体的指针
- struct Stu
- {
- char name[20];
- int age;
- };
- void print(struct Stu* ps)
- {
- printf("name = %s age = %d\n", (*ps).name, (*ps).age);
- //使用结构体指针访问指向对象的成员
- printf("name = %s age = %d\n", ps->name, ps->age);
- }
- int main()
- {
- struct Stu s = {"zhangsan", 20};
- print(&s); //结构体地址传参
- return 0;
- }
总结:
函数传参的时候,形参是实参的一份拷贝,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的 下降。
结构体传参的时候,要传结构体的地址。
以上是简单的对C语言中结构体的介绍,不足之处还望指点。