C typedef 用法 详解(通俗易懂)

这篇具有很好参考价值的文章主要介绍了C typedef 用法 详解(通俗易懂)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、前言

二、为什么需要typedef ?

三、typedef关键字的介绍和使用

        1.简介

        2.使用

        3.示例

                eg1 :

                eg2 : 

                eg3 : 

四、总结


一、前言

        大家好,今天为大家带来的是typedef关键字的内容分享。本篇博文算是《C语言数据结构与算法》系列专栏的开篇之作。其实,up准备出的C语言描述的数据结构与算法也仅仅是为了将来java版本的数据结构与算法做做铺垫,毕竟up是主攻java的😂。当然,之后up大概率会出C语言描述的算法题的讲解,这下数据结构与算法也算派上用场了。

        注意 : 代码中的注释也很重要;不要眼高手低,自己跟着过一遍才能真正有收获;可以点击文章侧边栏或者文章前面的目录进行跳转。良工不示人以朴,所有文章都会适时补充完善。感谢阅读!


二、为什么需要typedef ?

        拿结构体为例,假设我们定义一个Student类型的结构体,如下所示 : 

    struct Student {
        char name[100];
        int age;
        char sex;
        double score;
    };

        在没有typedef的情况下,我们每定义一个"struct Student"类型的变量,都需要写一遍"struct Student";而每次定义一个该类型对应的指针变量,都要写一遍"struct Student * "。如以下代码所示 :


# include <stdio.h> 

struct Student {
    char name[100];
    int age;
    char sex;
    double score;
};

int main (void) {
    struct Student stu1 = {"Cyan", 21, 'M', 425};
    struct Student stu2 = {"Rain", 19, 'F', 444};
    struct Student stu3 = {"Ice", 120, 'M', 411};
    struct Student stu4 = {"Five", 18, 'F', 433};

    struct Student * pst1 = &stu1;
    struct Student * pst2 = &stu2;
    struct Student * pst3 = &stu3;
    struct Student * pst4 = &stu4;

    return 0;
}

                这使得代码变得臃肿,显然不是我们所认可的。于是,C语言中提供了这样一种机制,它可以让你给任意的数据类型起个"外号",或者"小名"。


三、typedef关键字的介绍和使用

        1.简介

                C语言提供了typedef关键字,由编译器执行解释。我们可以使用它来为已有的数据类型取一个新的名字当你为某种数据类型取别名后,这个"新的名字"与该数据类型本来的名字是等价的。就像从小你爸爸妈妈叫你的小名儿一样,你的小名儿和你本来的名字,所指代的对象都是你。也就是说,你用哪个名字都可以。

        2.使用

                typedef关键字的使用格式如下

        typedef  数据类型  新的名字;

                一般情况下,这个"新的名字"都会做大写处理,以示区分。 

        3.示例

                eg1 :

                我们可以为int类型取一个别名"NB",NB与int 等价。如下代码所示 : 


# include <stdio.h> 

typedef int NB;

int main (void) {
    int i1 = 141;
    NB i2 = 415;
    NB i3 = 425;

    printf("i1 = %d\n", i1);
    printf("i2 = %d\n", i2);
    printf("i3 = %d\n", i3);

    return 0;
}

                运行结果 : 

c typedef,C,# 数据结构与算法(入门),c语言,c++,数据结构

                eg2 : 

                typedef的出现可以解决我们文章开篇提到的问题。我们可以命名"struct Student"类型为"STU",以表示学生的结构体类型,那么它对应的指针类型就应该是"STU * ",即 "struct Student * "此时等价于"STU * "。如以下代码所示


# include <stdio.h> 

typedef struct Student {
    char name[100];
    int age;
    char sex;
    double score;
} STU;

int main (void) {
    struct Student stu1 = {"Cyan", 21, 'M', 425};
    STU stu2 = {"Rain", 19, 'F', 444};
    STU stu3 = {"Ice", 120, 'M', 411};

    STU * pst1 = &stu1;
    STU * pst2 = &stu2;
    STU * pst3 = &stu3;
    
    printf("第一个学生stu1的信息如下:\n");
    printf("name = %s\t", stu1.name);
    printf("age = %d\t", stu1.age);
    printf("sex = %c\t\t", stu1.sex);
    printf("score = %.2lf\t", stu1.score);
    printf("\n===========================\n");

    printf("第二个学生stu2的信息如下:\n");
    printf("name = %s\t", pst2->name);
    printf("age = %d\t", pst2->age);
    printf("sex = %c\t\t", pst2->sex);
    printf("score = %.2lf\t", pst2->score);
    printf("\n===========================\n");

    printf("第三个学生stu3的信息如下:\n");
    printf("name = %s\t", pst3->name);
    printf("age = %d\t", pst3->age);
    printf("sex = %c\t\t", pst3->sex);
    printf("score = %.2lf\t", pst3->score);

    return 0;
}

                运行结果 : 

c typedef,C,# 数据结构与算法(入门),c语言,c++,数据结构

                eg3 : 

                我们可以在eg2案例的基础上,进一步简化代码。直接利用typedef关键字给"struct Student * "类型取别名为"PST",然后在后面加逗号,再加上另一个别名"STU",这么写就等价于STU代表了"struct Student"类型,而PST则代表了"struct Student * "类型。代码如下所示

# include <stdio.h> 

typedef struct Student {
    char name[100];
    int age;
    int score;
    
} * PST, STU;    

/*
    PST == struct Student * 
    STU == struct Student
*/

int main(void) {
//测试 : 
    STU stu1 = {"Cyan", 21, 426};
    STU stu2 = {"Ice", 120, 141};

    PST pst1 = &stu1;
    PST pst2 = &stu2;

    printf("第一个学生stu1的信息如下:\n");
    printf("name = %s\t", pst1->name);
    printf("age = %d\t", pst1->age);
    printf("score = %d\t", pst1->score);
    printf("\n===========================\n");

    printf("第二个学生stu2的信息如下:\n");
    printf("name = %s\t", pst2->name);
    printf("age = %d\t", pst2->age);
    printf("score = %d\t", pst2->score);
    printf("\n===========================\n");

    return 0;
}

                运行结果 : 

c typedef,C,# 数据结构与算法(入门),c语言,c++,数据结构


四、总结

        🆗,以上就是我们typedef关键字的全部内容了。内容本身没有什么难度,主要是知道怎么用它,这就是C语言的一种语法规定,将来阅读源码时能看懂,或者可以自己熟练使用就可以了。 感谢阅读!

        printf("END-----------------------------------------------------------------------------------");文章来源地址https://www.toymoban.com/news/detail-686954.html

到了这里,关于C typedef 用法 详解(通俗易懂)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java8新特性之toMap的用法——全网独一无二的通俗易懂的讲解

    对于java8的新特性toMap方法,相信有很多人都在工作中用过,接下来就通俗易懂的讲解一下toMap吧 先来看看官网对于toMap方法的解释 toMap有个三个重载的方法,每一个重载方法的详解分别如下 (1)方法1:两个参数 public static T, K, U Collector T, ?, MapK,U toMap(Function? super T, ? extends

    2024年02月08日
    浏览(57)
  • C 递归 详解(通俗易懂)

    目录 一、定义         1.概述         2.条件         3.比较 二、 如何理解递归?         1.函数调用其他函数示例 :          2.函数调用函数自身示例 :          3.函数调用自身的底层操作 :                  ①在主调函数调用被调函数之前——              

    2024年02月05日
    浏览(37)
  • java 可变参数 详解(通俗易懂)

    目录 一、概述: 二、格式: 三、注意事项(使用规范): 四、代码演示:         演示规范①~③:         演示规范④:         演示规范⑤:         课堂练习:         代码演示:         输出结果: 五、英文版本讲解:         java中,我们可以将 名称相同,

    2024年01月22日
    浏览(36)
  • 平衡二叉树详解 通俗易懂

      平板就类似于一个世界,当诱惑降临的时刻,当人们心中的平衡被打破,世界就会变得混乱,最后留下的就是剩下孤独寂寞和失败。这种单调机械化的社会,经不起诱惑的侵蚀,很容易崩溃。最容易被侵蚀的,恰恰是最空虚的心灵,因此世界、社会的平衡对于秩序管理来说

    2024年02月13日
    浏览(33)
  • 【TCP】四次挥手(最强详解!!通俗易懂!!)

    目录 想要了解三次握手的话可以参考我的另外一篇博客 首先来了解一下FIN和ACK FIN ACK 接着我们再来具体的了解TCP四次挥手过程 转换为最最通俗理解方法: 【TCP】三次握手(最强详解!!通俗易懂!!)_是瑞穗的猫啊的博客-CSDN博客 FIN和ACK就是两个用于关闭连接过程中的两个

    2024年01月19日
    浏览(37)
  • 【TCP】三次握手(最强详解!!通俗易懂!!)

    SYN和ACK就是两个用于握手和确认建立连接的信号量 就是同步的意思,大概表示的就是发起请求 可以将SYN视为“打招呼”或 “发起请求”的信号 。 在TCP的三次握手过程中,客户端发送一个带有SYN标志的包给服务器,表示客户端请求建立连接。 SYN包中包含一个初始序列号(

    2024年02月03日
    浏览(35)
  • Unity 锚点 Anchors的通俗易懂详解

    一、锚点Anchors是什么 当你在Canvas下建子物体的时候,选中子物体就会自带四个△,如下 这个三角也可以是分开的,如下 值得一提的是,这四个三角只能组成一个矩形,或者一个点,例(矩形) 你是不可能给它搞成别的形状的,比如平行四边形,不信你去试。 既然我们不能

    2024年02月08日
    浏览(33)
  • C语言malloc函数详解(通俗易懂)

    简单来说,malloc函数的作用是开辟一个空间来给你使用; 他包含在标准库中 返回值是一个void*(可以简单理解为一个没人知道它是什么类型的指针),一般我们都要对结果进行类型转换; 我们通过malloc申请的空间是以字节为单位的,如malloc(1*1024*1024)则申请了1MB的空间; 如果

    2023年04月08日
    浏览(48)
  • 数据结构-顺序表的基本实现(C语言,简单易懂,含全部代码)

    今天起开始编写数据结构中的各种数据结构及算法的实现,说到顺序表,我们首先得了解下线性表。 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻

    2023年04月08日
    浏览(39)
  • 最通俗易懂的TCP三次握手四次挥手详解

    TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。 四次挥手:即终止TCP连接,就是指断开一个T

    2024年02月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包