当前位置: 首页 > news >正文

C语言-结构体

1.共用体:
union //联合--共用体 

早期的时候,计算机的硬件资源有限,
能不能让多个成员变量 公用同一块空间 


//使用方式 类似 结构体  --- 也是构造类型 

struct 结构体名
{
  成员变量名
};


union 共用体名
{
  成员变量名
}; //表示构造了一个共用体类型 


//定义变量
//定义指针 
//定义数组 
//做函数形参 
//做函数返回值类型 


注意:
  1.共用体类型的大小 = 最大的成员的大小
  2.共用体初始化,只能写一个值,这个值是给第一个成员变量的值 
  3.共用体成员的访问方式 和 结构体一样
  4.共用体因为公用同一块空间
    赋值时,后赋值的会影响前面赋值的结果
  5.用途 
    a.节省空间 
    
    校园人员管理系统 
    struct student 
    {
       char name[20];
       int sno;
       float score;
    };
    
    struct teacher 
    {
       char name[20];
       int  tno;
       float salary;
    };
    
    
    struct member
    {
       char name[20];
       int  no;
       union 
       { 
          float salary;
          float score;
       }data;
    };
    
    struct member s;
    printf("score = %f\n",s.data.score);
    struct member t;
    printf("score = %f\n",s.data.salary);
    
    b.数据转换 
    192.168.0.59 //ip地址 --- 网络环境中 ---实际对应是一个32位的数值 
    
    
    #include <stdio.h>
    union Ip
    {
        unsigned char ip[4];
        unsigned int iip;
    };

    int main(int argc, const char *argv[])
    {
        union Ip d = {192,168,0,59};
        
        printf("ip = %#x\n",d.iip);
        
        return 0;
    }

判断大小端

2.枚举

枚举 --- 将变量的可能值(常量值) 一一列举出来 
         将有关联的常量值,一一列举出来,组合成一个枚举类型 
         
enum 枚举名
{
   枚举值   
   //sun,mon,tue,wed,thu,fri,sat
};  
 //构造了一个枚举类型 
 
注意:
  1.枚举类型 本质是 用int型数据表示的 
    枚举类型 设计的不严谨的地方 

如果一个变量只有几种可能的值,则可以定义为枚举类型。
所谓"枚举"是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。

枚举 --- 提高代码可读性 

 3.

typedef //type define 
     表示给已有类型起别名 
     
     
struct stu
{
};

struct stu s;

union demo
{
};
union demo d;

typedef struct stu s;  //s是struct stu 这个类型的别名 

s s1; //定义了一个 struct stu的变量 

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

void (*signal(int signum, void (*handler)(int) ))(int) ;


typedef int array_t[4];  //一维数组

array_t b[3]; //array_t => int[4]

4.

位运算:
  指的是二进制位上的运算 

用途:
  嵌入式 --- 位运算 非常普遍 
  操作硬件 
  
c语言位运算:
  &    与 
  |    或 
  ^    异或
  ~    取反  
  <<   左移 
  >>   右移
  
  
  & 与 
    运算规则: 一假则假 
  | 或
    运算规则: 一真则真  
  ^ 异或
    运算规则: 相同为0 不同为1  
  << 左移  a<<n 
    运算规则: 将 左操作数a 左移 n位 
    左移一位 相当于 结果乘以2
       右移:
    要看 要移动的数据的类型 
    看是有符号  --- 最高位补符号位   //算术右移  
        无符号     --- 最高位补0        //逻辑右移 
        

 

   
  
  

相关文章:

  • Python爬虫-猫眼电影的影院数据
  • 【后端发展路径】基础技术栈、工程能力进阶、高阶方向、职业发展路径
  • oracle 19c安装DBRU补丁时报错CheckSystemSpace的处理
  • AI在网络安全中的应用:构建智能防护体系
  • 如果网络中断,Promise.race 如何处理?
  • 48. c++线程
  • Linux-文件基本操作1
  • 空间复杂度O(m) O(n) O是什么,m是什么,n是什么
  • 使用多种机器学习算法进行鸢尾花分类
  • Deepseek本地部署和网页版本区别
  • Redis 的缓存雪崩、缓存穿透和缓存击穿详解,并提供多种解决方案
  • 据称苹果与阿里巴巴将合作为中国iPhone用户开发AI功能
  • 第一章:认识Tailwind CSS - 第一节 - Tailwind CSS 的核心理念
  • DBeaver clickhouse 时区不对 时间少了8小时
  • 【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)
  • 8、《5分钟构建RESTful API:Spring Boot Web开发入门》
  • 本地部署DeepSeek后的调用与删除全攻略
  • 计算机网络知识速记:TCP 与 UDP
  • 在 debian 12 上安装 mysqlclient 报错
  • Gemini Thinks Faster
  • 《缶翁的世界》首发:看吴昌硕等湖州籍书画家的影响
  • 重庆城市轨道交通拟听证调价:公布两套票价方案,正征求意见
  • 以军称已开始在加沙的新一轮大规模攻势
  • 圆桌丨全球化博弈与人工智能背景下,企业如何落地合规体系
  • 2000多年前的“新衣”长这样!马王堆文物研究新成果上新
  • 外企聊营商|武田制药:知识产权保护助创新药研发