• 结构体(1)


    结构体:

    记录班级的学生的信息:
    姓名 
       数组 
       char name[30][100]; //
    性别
       char sex[30]; // 0 1
    年龄
       int age[30];
    学号 
       int sno[30];

    打印 小明 同学 信息


    c语言 --- 提供了一种方式,可以让用户自定义数据类型 :
    构造一个数据类型 --就叫学生类型 

    提供一种可以让程序员自定义数据类型的方式

    目的:用来解决 一些 复杂的数据类型问题

    结构体定义:

    //构造一个结构体类型 --- 声明结构体 
    struct 结构体名

        成员列表
    };

    语法:
      1.struct    //结构体 类型 关键字 
      2.结构体名  (变量名)
                 //表明这个结构体类型的 名称 
                 //student 
      3.成员列表
                //来描述结构体类型中 具体的一些数据 
                //成员变量 
                // char name[20]; 
                // char sex;
                // int age;
                // int sno;
                // float score;
     4.最后结束时 } 后面,注意要有一个分号 

    思路:
       构造出 数据类型 之后,
       可以,
       定义变量
       定义数组
       定义指针 ... (因为现在的结构体相当于一个数据类型)

    结构体变量初始化:

    struct student s = {"xiaoMing",0,1110,99.5} ; //初始化 ,需要按照 成员列表的顺序,依次初始化 
                                       //成员与成员之间的初始化的值,用逗号隔开
                                       //s变量中,存储的是某一个学生的信息 

    如果变量是一个数组(一维或者二维),则里面继续用大括号隔开

                                                                 score↓

    例:成员int score[30]->{"xiaoMing",0,{1,2,……29,30},1110,99.5}

    声明结构体类型方式:

    1. 方式1
     先声明类型 后定义变量 
     struct student
     {
      ...
     };//声明类型 
     
     struct student s; //定义变量  

    2. 方式2 
      声明类型的同时定义变量 
       struct student
     {
      ...
     }s;//声明类型 并 定义变量 
     

    3. 方式3 
      声明类型的同时,定义变量,但是结构体名,可以省略   
     struct
     {
      ...
     }s;//声明类型 并 定义变量 (该写法省略了结构体名,但写了变量名,这种写法无法继续定义变量,因为没有结构体名,一般用于在某个特定函数中仅使用一次的情况)

    一般第一种用的多

    结构体特点:

      1.成员变量 一般是不同类型 //表示不同的含义 
      2.对于成员变量的访问
       只能通过 . (成员运算符),逐个访问
       不能通过类似 数组下标的方式,进行逐个遍历 

    .运算和->运算访问成员变量:

      . //成员运算 
    方法: 
     结构体变量名.成员变量名   
     -> //指针的结构体成员运算 
    方法:
     结构体类型指针->成员变量名 

    .运算前面接的是结构体但变量,而->接的是指针,两种方式皆是访问成员变量的值,

    而不是地址

    注意:

      1.同一类型的结构体变量间 是可以相互赋值的
      2.通过结构体类型的指针 也可以访问到结构体成员 
        -> 
      3.结构体类型 ,既可以做函数形参,也可以做函数返回值类型 

    重要:内存对齐:

    结构体对齐规则:

    1.对于成员变量,各自在自己的自然边界上对齐

    2.//32位的平台   
      //如果成员变量有超过4字节 ,按照4字节对齐
      //如果成员变量没有超过4字节的,则按成员变量中最大对齐 

    3.//64位的平台
      //如果成员变量超过4字节的,按照最大的成员对齐 
      //如果成员变量没有超过4字节的,则按成员变量中最大对齐

    也就是说,不管是32位还是64位,成员变量都先按照自然边界对齐,不超过四字节,结构体按照最大的成员变量对齐,超过四字节,在32位平台上,最大为四字节,而在64位平台上依然按照最大的成员变量对齐(如long 8字节)

  • 相关阅读:
    [OC学习笔记]多线程之GCD
    零基础自学javase黑马课程第十三天
    时间序列预测算法梳理(Arima、Prophet、Nbeats、NbeatsX、Informer)
    隐私计算融合应用研究
    ubuntu22 mysql8.0如何搭建主从复制?[亲自实践,步骤简洁]
    英伟达CEO Jensen Huang 在加州理工学院2024年毕业典礼的讲话:Commencement speech at CALTEC 2024
    FPGA CFGBVS 管脚接法
    linux-硬盘
    算法通关村第一关——链表青铜挑战笔记
    Qt界面实现中英文切换
  • 原文地址:https://blog.csdn.net/qq_54094530/article/details/139425276