欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > C语言-结构体

C语言-结构体

2025/9/25 11:27:27 来源:https://blog.csdn.net/2401_83532323/article/details/145521182  浏览:    关键词:C语言-结构体

1.数据类型的分类

数据类型
(1) 基本数据类型 
   整型 
   浮点型
   字符型 
 
 (2)构造类型
   数组
   结构体

2.结构体的概念

结构体:  用来处理,现实生活中,更复杂的数据的描述
         用来 描述复杂数据的 一种用户自定义的数据类型 

3.定义结构体

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

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

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

4.变量的初始化 和 赋值 
struct student   s = {110,"tom",18,98.5};

5.引用结构体数据 
(1)一般,我们是引用到结构体成员 (引用到这种基本类型)

(2).  //结构体成员运算符 

(3)结构体变量名.结构体成员变量名 
   s.sno
   s.name
   s.age
   s.score  //引用到结构体成员变量

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

结构体类型的指针->结构体成员变量名 

说明:
  1. 同一类型的结构体 变量间 可以相互赋值 
  2. 结构体变量赋值,是赋值给 结构体成员的

结构体定义赋值打印

直接赋值和从键盘输入赋值

数组,函数,指针实现多个结构体打印

输入学生信息并打印

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

  1.结构体成员的对齐 --- 放在自然边界 (偶数位置)
  2.结构体整体的对齐 --- 以结构体中最大的成员对齐 

7.结构体定义的三种方法

注意:
   1.结构体类型的定义 
     可以在全局
     可以在局部 
     
   2. 使用方式 
    (1) 先定义结构体类型 再定义变量名
      struct student 
      { 
        ... 
      }; //定义了类型 
      
      struct student s; //定义了变量 
      
    (2) 定义类型的同时定义变量 
      struct student 
      { 
        ... 
      }s={...}; //定义了类型 
      
    (3)定义类型的同时定义变量 ,结构体名省略 
      struct 
      { 
        ... 
      }s={...}; //定义了类型 

8.将数据定义到堆区

堆区 --- 空间很大,但是需要手动申请,手动释放 
       void *malloc(size_t size); // 申请函数
      功能:
          从堆区申请一块内存空间 
      参数:
         @size ---说明,要申请的空间的大小 
      返回值:
        void *  返回申请到的空间的地址 
                
       void free(void *ptr); //释放函数 

注意:
          1.free本身表示将空间释放,就是将空间交还给操作系统,操作系统之后,可以自由安排 
          2.注意:
            free 并不会将释放的空间上的数据清零 
          3.不能对同一块空间多次free 
          4.释放掉之后的,空间,不要在使用了
            一般将对应的指针变量设置为NULL 
           //(悬空指针) 

申请堆并释放

堆上对结构体进行处理



  

         
 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词