• 结构体类型


    结构体是一种构造数据类型,把不同类型的数据整合在一起,每一个数据都称为该结构体类型的成员。

    结构体(struct)数据类型可以把基本数据类型和派生类组合起来,以描述复杂的事物。结构类型也是派生类型。

    基本数据类型都是单一的,只能表示一些简单的事物。

    结构体类型定义

    在程序设计中,使用结构体类型时,首先对结构体类型的组成进行描述,定义方式:

    1. struct 结构体类型名称
    2. {
    3. 数据类型 成员1
    4. 数据类型 成员2
    5. ...
    6. 数据类型 成员n;
    7. }

    结构体变量的定义:为了能在程序中使用结构体类型的数据,应该定义结构体类型的变量,并在其中存放具体的数据。

    struct [结构类型名] {成员声明列表} [变量名列名];

    1、定义结构体类型,定义结构体变量;

    1. struct coord
    2. {
    3. int x;
    4. int y;
    5. } ;

    2、在定义结构体类型的同时定义结构体变量;

    1. struct coord
    2. {
    3. int x;
    4. int y;
    5. } first , secord;

    3、直接定义结构体变量(不建议)

    1. struct
    2. {
    3. int x;
    4. int y;
    5. } first , secord;

    结构体类型时用户自定义的一种数据类型,在编译时对结构体类型不分配空间,只有用它来定义某个变量时,才会为该结构体变量分配结构体类型所需大小的内存单元。

    结构体变量的内存分配:结构体变量占据的内存大小是按照字节对齐的机制来分配的。通常情况下,字节对齐满足两个原则。

    1、结构体的每个成员变量相当于结构体首地址的偏移量,是该成员变量的基本数据类型(不包括结构体、数组等)大小的整数倍,如果不够,编译器会在成员之间加上填充字节

    2、结构体的总大小为结构体最宽基本类型成员大小的整数倍,如果不够,编译器会在最末一个成员之后加上填充字节

    程序演示:

    1. struct Sample
    2. {
    3. short int n;
    4. char c[11];
    5. float f;
    6. double b;
    7. }s;
    8. int main(void)
    9. {
    10. printf("变量s所占字节数为:%d个字节\n",sizeof(s));
    11. printf("结构成员 地址\n");
    12. printf(" n %X\n",&s.n) ;
    13. printf(" c %X\n", s.c) ;
    14. printf(" f %X\n",&s.f) ;
    15. printf(" n %X\n",&s.b) ;
    16. return 0;
    17. }

    例题1:计算两点之间的距离

    1. #include
    2. #include
    3. struct coord //结构类型定义
    4. {
    5. int x;
    6. int y;
    7. };
    8. int main(void)
    9. {
    10. struct coord first,second; //结构变量声明
    11. double distance;
    12. printf("请输入第一个点坐标:");
    13. scanf("%d %d",&first.x,&first.y); //点运算符访问结构成员
    14. printf("请输入第二个点坐标:");
    15. scanf("%d %d",&second.x,&second.y);
    16. int xDiff = first.x-first.x; //横坐标的差
    17. int yDiff = second.x-second.y; //纵坐标的差
    18. distance = sqrt(pow(xDiff,2)+pow(yDiff,2));
    19. printf("两点间距离是:%f\n",distance);
    20. return 0;
    21. }

    通过点运算符访问结构成员:结构变量实际上是结构中多个成员变量的组合。在C语言中,使用“.”运算符来引用结构体变量中的各个成员。

    注意:通常结构体类型的定义放在主函数外。

  • 相关阅读:
    赋能借壳上市
    提升客户体验,你只需要做到这一点
    C语言:空指针野指针
    从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(二)
    原生php 实现redis登录五次被禁,隔天再登陆
    Ubuntu20.04 交叉编译librtmp
    Navicat 安装及初步配置指南
    java中常用的集合
    【计算机网络】数字签名为什么能够解决信用问题
    四、IPSec NAT穿越
  • 原文地址:https://blog.csdn.net/m0_74306580/article/details/134549526