一起talk C栗子吧(第九十 二回:C语言实例--浅谈typedef)
各位看官们,大家好,上一回中咱们说的是数组大小的例子,这一回咱们说的例子是:浅谈typedef。闲话休提,言归正转。让我们一起talk C栗子吧!
最近有看官问一些关于typedfe的问题,我在这里专门做一个说明,希望对大家有帮助。
typedef是C语言的一个关键字,用来重新定义类型。通俗点说叫起别名或者起绰号也可以。
typedef通常有两个功能:
为了程序简洁易懂(可读性好);为了避免程序出错;简洁易懂
关于简洁易懂,我们举一个例子:
typedef struct person { int age; char *name; char flag; }Person;
在例子中定义了一个新的类型:Person.它和struct person的效果相同,在下面的代码中
Person p1; //定义一个结构体变量 struct person p1; //定义一个结构体变量
在上面的例子中Person p1; 等价于 struct person p1.但是前面的写法更加简洁一些。
还记得是我们在前面的章回中介绍过后的函数;signal吗?下面是signal函数的原型:
void (*signal(int signo, void (*func) (int))) (int)
我们可以定义一个新类型:
typedef void func (int);
它表示一个函数,该函数拥有一个int类型的参数,并且返回类型为void。定义好该类型后,函数signal的函数原型可以这样写:
func * signal (int signo, func *pFun); //使用typedef定义新类型后的signal函数
现在的signal函数是不是简洁很多呢。
避免出错
关于避免程序出错,我们也举一个例子:
#include int main() { int *p1,p2; int a,b; a = 3; b = 5; p1 = &a; p2 = &b; printf("a = %d \n",*p1); printf("b = %d \n",*p2); return 0; }
编译上面的程序会有编译警告和错误出现:
In function ‘main’: typFile.c:12:5: warning: assignment makes integer from pointer without a cast [enabled by default] p2 = &b; //发出警告 typFile.c:15:21: error: invalid type argument of unary ‘*’ (have ‘int’) printf("b = %d \n",*p2); //编译错误
其实我们是想定义两个int类型的指针,结果定义了一个指针,一个变量,为了避免这种错误,我们可以在程序中使用typedef来定义一个指针类型。具体如下:
#include typedef int * pInt; //定义一个新的指针类型 int main() { pInt p1,p2; //使用新类型定义两个指针 int a,b; a = 3; b = 5; p1 = &a; p2 = &b; printf("a = %d \n",*p1); printf("b = %d \n",*p2); return 0; }
编译该程序,刚才的警告和错误没有了,我们运行编译后的程序可以得到以下结果:
a = 3 b = 5 //程序运行正确
各位看官,关于浅谈typedef的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
上一篇: C语言:模拟实现memcpy
下一篇: MySQL常用操作介绍
推荐阅读
-
一起talk C栗子吧(第一百八十二回:C语言实例--在printf函数中设置输出宽度一)
-
一起talk C栗子吧(第一百一十六回:C语言实例--线程同步之互斥量二)
-
一起talk C栗子吧(第一百一十七回:C语言实例--线程死锁一)
-
一起talk C栗子吧(第一百八十三回:C语言实例--在printf函数中设置输出宽度二)
-
一起talk C栗子吧(第一百八十四回:C语言实例--在printf函数中设置输出宽度三)
-
一起talk C栗子吧(第一百九十六回:C语言实例--DIY less命令五 )
-
一起talk C栗子吧(第一百六十二回:C语言实例--套接字知识体系图)
-
一起talk C栗子吧( 第一百四十回:C语言实例--文件操作:基于文件描述符三)
-
一起talk C栗子吧(第一百四十三回:C语言实例--文件操作:基于文件指针三)
-
一起talk C栗子吧(第一百三十九回:C语言实例--文件操作:基于文件描述符二)