当前位置:   article > 正文

BIT-7-结构体(C语言初阶学习)

BIT-7-结构体(C语言初阶学习)
  • 结构体类型的声明
  • 结构体初始化
  • 结构体成员访问
  • 结构体传参

1. 结构体的声明


1.1 结构的基础知识

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

1.2 结构的声明

  1. struct tag
  2. {
  3. member-list;
  4. }variable-list;

例如描述一个学生:

  1. typedef struct Stu
  2. {
  3. char name[20];//名字
  4. int age;//年龄
  5. char sex[5];//性别
  6. char id[20];//学号
  7. }Stu;//分号不能丢

1.3 结构成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体。

1.4 结构体变量的定义和初始化

有了结构体类型,那如何定义变量,其实很简单。

  1. struct Point
  2. {
  3. int x;
  4. int y;
  5. }p1; //声明类型的同时定义变量p1
  6. struct Point p2; //定义结构体变量p2
  7. //初始化:定义变量的同时赋初值。
  8. struct Point p3 = {x, y};
  9. struct Stu     //类型声明
  10. {
  11. char name[15];//名字
  12. int age;    //年龄
  13. };
  14. struct Stu s = {"zhangsan", 20};//初始化
  15. struct Node
  16. {
  17. int data;
  18. struct Point p;
  19. struct Node* next;
  20. }n1 = {10, {4,5}, NULL}; //结构体嵌套初始化
  21. struct Node n2 = {20, {5, 6}, NULL};//结构体嵌套初始化

2. 结构体成员的访问


  • 结构体变量访问成员
    结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
    例如:

我们可以看到 s 有成员 name 和 age ;
那我们如何访问s的成员?

  1. struct S s;
  2. strcpy(s.name, "zhangsan");//使用.访问name成员
  3. s.age = 20;//使用.访问age成员
  • 结构体指针访问指向变量的成员
    有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
    那该如何访问成员。
    如下:
  1. struct Stu
  2. {
  3. char name[20];
  4. int age;
  5. };
  6. void print(struct Stu* ps)
  7. {
  8. printf("name = %s  age = %d\n", (*ps).name, (*ps).age);
  9.   //使用结构体指针访问指向对象的成员
  10. printf("name = %s  age = %d\n", ps->name, ps->age);
  11. }
  12. int main()
  13. {
  14.   struct Stu s = {"zhangsan", 20};
  15.   print(&s);//结构体地址传参
  16.   return 0;
  17. }

3. 结构体传参


直接上代码:

  1. struct S
  2. {
  3. int data[1000];
  4. int num;
  5. };
  6. struct S s = {{1,2,3,4}, 1000};
  7. //结构体传参
  8. void print1(struct S s)
  9. {
  10. printf("%d\n", s.num);
  11. }
  12. //结构体地址传参
  13. void print2(struct S* ps)
  14. {
  15. printf("%d\n", ps->num);
  16. }
  17. int main()
  18. {
  19. print1(s);  //传结构体
  20. print2(&s); //传地址
  21. return 0;
  22. }

上面的 print1 和 print2 函数哪个好些?

答案是:首选print2函数。
原因:

函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。

结论:
结构体传参的时候,要传结构体的地址。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/257882
推荐阅读
相关标签
  

闽ICP备14008679号