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

举报
Cyan_RA9 发表于 2023/04/11 19:05:40 2023/04/11
【摘要】 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;
    };

image.gif

        在没有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;
}

image.gif

                这使得代码变得臃肿,显然不是我们所认可的。于是,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;
}

image.gif

                运行结果 : 

image.png

                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;
}

image.gif

                运行结果 : 

image.png

                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;
}

image.gif

                运行结果 : 

image.png


四、总结

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

        printf("END-----------------------------------------------------------------------------------");

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。