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

简介: C 数据结构与算法入门——typedef关键字 内容分享。

目录

一、前言

二、为什么需要typedef ?

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

       1.简介

       2.使用

       3.示例

               eg1 :

               eg2 :

               eg3 :

四、总结


一、前言

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

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


二、为什么需要typedef ?

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

structStudent {
charname[100];
intage;
charsex;
doublescore;
    };

image.gif

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

#include<stdio.h>structStudent {
charname[100];
intage;
charsex;
doublescore;
};
intmain (void) {
structStudentstu1= {"Cyan", 21, 'M', 425};
structStudentstu2= {"Rain", 19, 'F', 444};
structStudentstu3= {"Ice", 120, 'M', 411};
structStudentstu4= {"Five", 18, 'F', 433};
structStudent*pst1=&stu1;
structStudent*pst2=&stu2;
structStudent*pst3=&stu3;
structStudent*pst4=&stu4;
return0;
}

image.gif

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


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

       1.简介

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

       2.使用

               typedef关键字的使用格式如下 :

       typedef  数据类型  新的名字;

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

       3.示例

               eg1 :

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

#include<stdio.h>typedefintNB;
intmain (void) {
inti1=141;
NBi2=415;
NBi3=425;
printf("i1 = %d\n", i1);
printf("i2 = %d\n", i2);
printf("i3 = %d\n", i3);
return0;
}

image.gif

               运行结果 :

image.png

               eg2 :

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

#include<stdio.h>typedefstructStudent {
charname[100];
intage;
charsex;
doublescore;
} STU;
intmain (void) {
structStudentstu1= {"Cyan", 21, 'M', 425};
STUstu2= {"Rain", 19, 'F', 444};
STUstu3= {"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);
return0;
}

image.gif

               运行结果 :

image.png

              eg3 :

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

#include<stdio.h>typedefstructStudent {
charname[100];
intage;
intscore;
} *PST, STU;    
/*PST == struct Student * STU == struct Student*/intmain(void) {
//测试 : STUstu1= {"Cyan", 21, 426};
STUstu2= {"Ice", 120, 141};
PSTpst1=&stu1;
PSTpst2=&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");
return0;
}

image.gif

               运行结果 :

image.png


四、总结

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

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

目录
相关文章
|
1月前
|
编译器 C语言 C++
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr(下)
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr
25 0
|
1月前
|
存储 安全 编译器
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr(上)
从C语言到C++③(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for+nullptr
30 0
|
8月前
|
存储 编译器 C语言
C语言进阶教程(再论struct,union,enum)
C语言进阶教程(再论struct,union,enum)
43 0
|
8月前
|
编译器 C语言
C语言进阶教程(还在乱用define和typedef吗)
C语言进阶教程(还在乱用define和typedef吗)
59 0
|
11月前
|
C语言 C++
C语言 typedef的用法示例讲解
typedef是在C和C++编程语言中的一个关键字,作用是为现有的数据类型(int、float、char……)创建一个新的名字,目的是为了使代码方便阅读和理解。
137 1
|
C语言
【C语言】typedef的用法简析
【C语言】typedef的用法简析
88 0
|
编译器 C语言 C++
C语言编程-typedef
C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:
62 0
|
C语言
嵌入式C语言基础:一文读懂#define与typedef的区别
嵌入式C语言基础:一文读懂#define与typedef的区别
131 0
|
编译器 Linux C语言
0基础C语言自学保姆教程——第十一节 自定义类型(结构体、枚举、位段、联合)与预处理指令(#define、#include等)
不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
155 0
0基础C语言自学保姆教程——第十一节 自定义类型(结构体、枚举、位段、联合)与预处理指令(#define、#include等)