• C语言基础-结构体


    结构体类型的声明

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

    数组:一组相同类型元素的集合

    结构体:其实是一组不一定相同类型元素的集合

    1. //结构声明
    2. // struct tag //tag根据实际情况给名字
    3. // {
    4. // member-list; //成员列表(1个或者多个)
    5. // }variable-list;//变量列表
    6. //描述一个学生
    7. //名字+年龄+性别
    8. //声明结构体类型
    9. // struct Stu
    10. // {
    11. // //成员变量,是用来描述结构体对象的相关属性的
    12. // char name[20];
    13. // int age;
    14. // char sex[5]; //男 女 保密
    15. // }; //s2,s3,s4;//s2,s3,s4就是结构体变量 - 全局变量
    16. // typedef struct Stu //重命名
    17. // {
    18. // //成员变量,是用来描述结构体对象的相关属性的
    19. // char name[20];
    20. // int age;
    21. // char sex[5]; //男 女 保密
    22. // } Stu;
    23. // int main()
    24. // {
    25. // struct Stu s1; //局部变量
    26. // //Stu s2; //在c语言中,没有对结构体类型typedef,struct关键字不能省略
    27. // return 0;
    28. // }

    结构体初始化

    1. //结构成员的类型
    2. struct S
    3. {
    4. int a;
    5. char arr[5];
    6. int* p;
    7. }s1 = {100,"fan",NULL};
    8. //int n = 2023;
    9. // struct S s2 = {98,"111",&n};
    10. struct S s2 = {98,"111",NULL};
    11. struct B
    12. {
    13. char arr[10];
    14. struct S s;
    15. double d;
    16. };
    17. int main()
    18. {
    19. struct S s3 = {.arr = "aaa", .a = 10, .p = NULL};
    20. //printf("%d %s %p\n",s1.a,s1.arr,s1.p); //结构成员访问操作符
    21. //printf("%d %s %p\n",s2.a,s2.arr,s2.p);
    22. //printf("%d %s %p\n",s3.a,s3.arr,s3.p);
    23. struct B b = {"hello",{20,"aaa",NULL},3.14};
    24. printf("%s %d %s %p %lf\n",b.arr, b.s.a, b.s.arr, b.s.p, b.d);
    25. return 0;
    26. }

    结构体成员访问

    1. struct Stu
    2. {
    3. /* data */
    4. char name[20];
    5. int age;
    6. };
    7. // void set_stu(struct Stu* ps)
    8. // {
    9. // (*ps).age = 20;
    10. // //t.name = "张三"; //err
    11. // strcpy((*ps).name,"张三"); //字符串拷贝
    12. // }
    13. void set_stu(struct Stu* ps)
    14. {
    15. ps->age = 20; //结构体成员访问操作符 结构体指针 -> 结构体成员
    16. //t.name = "张三"; //err
    17. strcpy(ps->name,"张三"); //字符串拷贝
    18. }
    19. void printf_stu(struct Stu t)
    20. {
    21. printf("%s %d\n",t.name,t.age);
    22. }
    23. int main()
    24. {
    25. struct Stu s = {0};
    26. set_stu(&s); //传值调用
    27. printf_stu(s);
    28. return 0;
    29. }

    结构体传参

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

  • 相关阅读:
    HUAWEI内网最新发布了一份452页网络协议手册,GitHb百万收藏
    Vue Jsp页面值绑定出现换行后台值导致syntaxerror 问题处理
    百度智能业务部java实习一面
    leetcode刷题(125)——931. 下降路径最小和
    【学习笔记】多模态综述
    Lua更多语法与使用
    【bugfix】error in chunk.js from uglifyjs
    Arm 架构 Ubuntu 使用 Docker 安装 Gitlab 并使用
    YOLOv6:又快又准的目标检测框架开源啦
    boost 管理存储交易 作为存储提供商 boostd
  • 原文地址:https://blog.csdn.net/qq_61658398/article/details/133101518