C语言基础之共用体

155 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第十天,点击查看活动详情

知识点8--共用体

接上篇,这里我们学习共用体~(注:学习笔记)

含义

在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。

用typedef定义类型

  1. 用typedef声明新的类型名来代替已有的类型名

    a. 声明Integer为整型

    typedef int Integer

    b. 声明结构类型

    typedef struct{
            int month;
            int day;
            int year;
    }DATE;
    

    输出结构体中元素:

    int main(){
    DATE data_one;
    data_one.month = 12;
    data_one.day = 31;
    data_ont.year = 2022;
    
    printf("%d - %d - %d \n",data_one.year,data_one.month,data_one.day);
    }
    //2022 - 12 - 31
    

    c. 声明NUM为数组整型类型

    typedef int NUM[100];
    
    int main(){
            NUM num = {0};
            printf("%d\n\n",sizeof(num));
    }
    //400
    

    d. 声明STRING为字符指针类型

    typedef char* P;
    
    int main(){
            P p1;
            p1 = "I love China!";
            printf("%s",p1);
    }
    //I love China!
    

    e. 声明POINTER为指向函数的指针类型,该函数返回整型值

    typedef void (*P)();
    
    void fun();
    int main(){
            P p1; //void (*p1)();
    
            char a[20] = "I love China!";
            printf("%d %d\n",a,&a);
            p1 = fun;
    //	p1 = &fun; 也可以 
    
    //p1是指针指向的函数,fun也是函数,相当于fun的函数变成了p1的函数,所以要调用 
            p1(); //调用函数 
    }
    
    void fun(){
            printf("I love China!\n");
    }
    

使用方法

  1. 先按定义变量的方法写出定义体
  2. 将变量名换成新类型名(例如:将i换成COUNT)
  3. 在最前面加typedef(例如:typedef int COUNT)
  4. 然后可以用新类型名去定义变量(例如:COUNT i,j;)

对typedef的一些声明

  • 用typedef可以声明各种类型名,但不能用来定义变量;

  • 用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型

  • 当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型,把他们单独放在一个文件中,然后在需要用到他们的文件中用#include命令把它们包含进来;

  • 使用typedef有利于程序的通用与移植

  • typedef与#define:

    a. 有相似之处:例如:typedef int COUNT;#define COUNT int的作用都是用COUNT代表int

    b. 不同之处:#define是在预编译时处理的,他只能作简单的字符串替换;而typedef是在编译时处理的。实际上他并不是做简单的字符串替换,而是采用如同定义变量的方法那样来声明一个类型。

    typedef (int*) p1;
    
    #define p2 int*  
    

声明

本篇是跟着b站上的小甲鱼视频学习时候做的笔记,方便以后复习,希望每天都能进步一点点!!!

链接附上:C语言学习之小甲鱼视频链接