本文是对typedef用法的详细分析和介绍,供有需要的朋友参考。
新手可能用不到这个关键字,但它是一个非常有用的关键字,可以让代码更加模块化(即与其他代码关联更少)。也是C中实现Traits技术的基础,也是模板编程的基本语法之一。
如果变量定义命名一个变量,而typedef(或类型定义)命名一个类型。既然都起了名字,那么就会有很多相似之处。而且我觉得每个人都会用到变量定义,所以类型定义必然会用到。
类型定义的语法可以用一句话来概括:只要变量定义前面有typedef,就成了类型定义。这里应该是变量的东西变成了类型。如,下面的变量定义:int整数;//整型变量int *指针;//整数指针变量int array[5];//整数数组变量int * p _ array[5];//整型指针数组的变量int(* array _ pointer)[5];//整型数组指针的变量int函数(int param);//函数定义,或者函数名可以看作函数变量int * function(int param);//还是函数,但返回值是整数指针int(* function)(int param);//现在是指向函数若要定义相应类型,即为类型来起名字,就是下面的形式:typedef int integer_t的指针;//整型typedef int * pointer _ t;//整数指针类型typedef int array _ t[5];//整数数组类型typedef int * p _ array _ t[5];//整型指针数组的Type typedef int(* array _ pointer _ t)[5];//整型数组typedef int function_t (int param)的指针类型;//函数类型typedef int * function _ t(int param);//函数类型typedef int(* function _ t)(int param);//函数指针的类型注意:以上函数类型在C中可能会出错,因为C中没有函数类型,其函数变量会自动退化为函数指针;在c中似乎是可以的,这里主要解释的是形式上的相似性。typedef的一般形式为:typedef类型定义名称;Typedef在编程中的使用一般有两个目的,一是给变量取一个新的容易记忆且有意义的名字,二是简化一些复杂的类型声明。实际上,当在C语言中声明变量时,有一个存储类说明符,它包括我们熟悉的extern、static、auto和register。当未指定存储类型指示符时,编译器将根据约定自动采用默认值。另外,存储类型指示符的位置也是任意的(但要求在变量名和指针*之前),这意味着下面几行代码是等价的:static const int I;const static int I;int const static I;const int static I;根据C语言规范,在进行句法分析的时候,typedef和存储类型指示符是等价的!所以我们把上面用static的地方换成typedef:typedef const int I;const typedef int I;int const typedef I;const int typedef I;上面代码的语义是:I被定义为类型名,它的等价类型是const int。如果将来我们有i a代码,它就相当于const int A,有指针的地方也是这样,比如:int const typedef * t;那么代码t p .相当于int const *p.另外,typedef不能和static等存储类型指示符同时使用,因为每个变量只能有一种存储类型,所以代码:typedef static int i;是非法的。使用typedef简化复杂的变量声明1),定义一个有10个指针的数组,这些指针指向一个有整数参数并返回整数的函数?第一种方法:int(* a[10])(int);第二种方法:typedef int(* pf unc)(int);p func a[10];2),定义一个有10个指针的数组。指针指向一个函数,该函数有一个函数指针(无参数,返回值为null)参数,返回null。第一种方法:void(* a[10])(void(*)(void));第二种方法:typedef void(* pfuncParam)(void);typedef void(* pfunc)(pfuncParam);p func a[10];3),一个有10个函数指针的数组的指针(无参数,返回值双精度)。第一种方法:double(*)(void)(* p)[10];第二种方法:typedef double(* pfunc)(void);typedef pfunc(* pfuncParam)[10];pfuncParam p;总结:typedef有两种用法:1.一般形式,定义现有类型的别名typedef类型定义名;二、创建新类型typedef,返回值类型,新类型名(参数列表);
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。