当前位置:   article > 正文

C语言结构体struct详解_c语言struct用法详解

c语言struct用法详解

目录

一、struct的概念

1、类比:

2、含义详解:

二、结构体变量的定义

1、创建结构体类型的时候定义

2、具体使用的时候定义

三、如何得到结构体成员?

1、通过 . 点操作符得到结构体成员

2、运用指针通过箭头 -> 得到结构体成员

四、结构体的自引用注意事项

1、错误用法(无限套娃)

2、正确用法

五、结构体传参

1、传值

2、传地址


一、struct的概念

1、类比:

数组里存放的是相同元素的集合,而结构体存放的可以是不同元素的集合。

例如描述一个学生:

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

2、含义详解:

                   struct--定义结构体       

                  Stu--结构体标签(方便了解结构体成员类型,在这里就是学生的相关信息)

                  struct Stu:结构体类型

二、结构体变量的定义

(使用:类型+变量名(类似于int a,char b))

1、创建结构体类型的时候定义

  1. struct Stu
  2. {
  3. char name[20];
  4. int age;
  5. char sex[5];
  6. char id[20];
  7. //创建的时候定义变量
  8. }s1,s2,s3;
  9. //直接使用
  10. s1={…………};
  11. s2={…………};

2、具体使用的时候定义

struct Stu s = { "张三",18,"男","123456" };//成员之间用 , 隔开

三、如何得到结构体成员?

1、通过 . 点操作符得到结构体成员

printf("%s %d %s %s", s.name, s.age, s.sex, s.id);

2、运用指针通过箭头 -> 得到结构体成员

  1. struct Stu s = { "张三",18,"男","123456" };
  2. //创建结构体指针
  3. struct Stu* p = &s;
  4. printf("%s %d %s %s\n", p->name, p->age, p->sex, p->id);

四、结构体的自引用注意事项

1、错误用法(无限套娃)

  1. //错误用法
  2. struct S
  3. {
  4. int data;
  5. struct S next;
  6. };

2、正确用法

  1. struct S
  2. {
  3. int data;
  4. //指针
  5. struct S* next;
  6. };

五、结构体传参

结构体传参可以传值,也可以传地址。

1、传值

  1. void Print(struct Stu s)
  2. {
  3. printf("%s %d %s %s", s.name, s.age, s.sex, s.id);
  4. }
  5. int main()
  6. {
  7. struct Stu s = { "张三",18,"男","123456" };
  8. //传值
  9. Print(s);

2、传地址

  1. void Print(const struct Stu* p)//const 修饰*p,*p的值不可以改变,Print函数只负责打印
  2. {
  3. printf("%s %d %s %s\n", p->name, p->age, p->sex, p->id);
  4. }
  5. int main()
  6. {
  7. struct Stu s = { "张三",18,"男","123456" };
  8. //传地址
  9. Print(&s);

不过总的来说,还是建议传地址,因为地址大小是固定的4/8字节(32位平台/64位平台),而且通过地址我们可以在函数内部改变结构体成员变量的值,权限更多一些。


 

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

闽ICP备14008679号