嵌入式基础学习|C语言篇——结构体(含进阶)

结构体 

数据类型
 基本数据类型 
   整型 
   浮点型
   字符型 
 构造类型
   数组
   结构体  
结构体:  用来处理,现实生活中,更复杂的数据的描述
         用来 描述复杂数据的 一种用户自定义的数据类型     
描述学生信息:
//简单点 
name  // "tom"
sex   // ""
age   // int 
sno   // int 
score // float
//详细点 
name 
sex
age
sno 
score
address
tel
qq
email
parent 
...             

//结构体类型 定义  --- 定义(从无到有) 声明()
struct 结构体名
{
    成员列表
};

(1).struct    表示 这是一个结构体类型 
(2).结构体名  标识符 
(3).成员列表  这个结构类型中要描述的具体数据 
              一般,都是变量定义的形式 
eg:

struct student 
{
    int sno;
    char name[20];
    int age;
    float score;
}; //此时 表示 定义了一个 学生信息 的 结构体类型 
   //数据类型 --- 用户自定义 

//有了数据类型 之后 

int //c语言提供的 
int a;
int *p;
int a[10];
//定义一个结构体类型的变量 
struct student   s;     //定义了一个学生类型的结构体变量 
------1-------  -2-
1 是结构体类型名 
2 是变量名
//变量的初始化 和 赋值 
struct student   s = {110,"tom",18,98.5};  /
//引用结构体数据 
一般,我们是引用到结构体成员 (引用到这种基本类型)

.  //结构体成员运算符 

结构体变量名.结构体成员变量名 
   s.sno
   s.name
   s.age
   s.score  //引用到结构体成员变量 
说明:
  1. 同一类型的结构体 变量间 可以相互赋值 
  2. 结构体变量赋值,是赋值给 结构体成员的 

->  //指向结构体成员运算符

结构体类型的指针->结构体成员变量名
考点:
 结构体的对齐规则: //内存地址的对齐
1.在32位的平台上,默认都是按4字节对齐的。 
2.对于成员变量,
   各自在自己的自然边界上对齐。
   char  -- 1字节 
   short -- 2字节   
   int   -- 4字节  
3.如果 成员变量中有比4字节大。      
  此时 整个结构体 按照4字节对齐。 //32位的平台 
4.如果 成员变量中没有有比4字节大。  
  此时 整个结构体 按照最大的那个成员对齐。
  
  //32位的平台   
  //如果有超过4字节 ,按照4字节对齐
  //如果没有超过4字节的,则按成员变量中最大对齐 
  //64位的平台  ---- 64位平台 整个结构体对齐, 按成员中最大的对齐   

  1.结构体成员的对齐 --- 放在自然边界 (偶数位置)
  2.结构体整体的对齐 --- 以结构体中最大的成员对齐 
⭐️注意:
   1.结构体类型的定义 
     可以在全局
     可以在局部 
   2. 使用方式 
    1. 先定义结构体类型 再定义变量名
      struct student 
      { 
        ... 
      }; //定义了类型 
      
      struct student s; //定义了变量    
    2. 定义类型的同时定义变量 
      struct student 
      { 
        ... 
      }s={...}; //定义了类型  
    3. 定义类型的同时定义变量 ,结构体名省略 
      struct 
      { 
        ... 
      }s={...}; //定义了类型 
    //堆区 --- 空间很大,但是需要手动申请,手动释放 
       void *malloc(size_t size); // 申请函数
      功能:
          从堆区申请一块内存空间 
      参数:
         @size ---说明,要申请的空间的大小 
      返回值:
        void *  返回申请到的空间的地址    
       void free(void *ptr); //释放函数 
        功能:
            释放堆区空间 
        参数:
          pstr  //必须是 之前 申请到的堆区内存空间的地址    
     ⭐️   注意:
          1.free本身表示将空间释放,就是将空间交还给操作系统,操作系统之后,可以自由安排 
          2.注意:
            free 并不会将释放的空间上的数据清零 
          3.不能对同一块空间多次free 
          4.释放掉之后的,空间,不要在使用了
            一般将对应的指针变量设置为NULL 
           //(悬空指针) 
           
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值