C语言typedef用法总结
c语言typedef用法详解

用途1:定义一种类型的别名,而不只是简单的宏替换。
可以用作同时声明指针型的多个对象。
比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,// 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可行用途2:为复杂的声明定义一个新的简单的别名。
方法是:在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化版。
举例:1. 原声明:int *(*a[5])(int, char*);变量名为a,直接用一个新别名pFun替换a就可以了:typedef int *(*pFun)(int, char*);原声明的最简化版:pFun a[5];2. 原声明:void (*b[10]) (void (*)());变量名为b,先替换右边部分括号里的,pFunParam为别名一:typedef void (*pFunParam)();再替换左边的变量b,pFunx为别名二:typedef void (*pFunx)(pFunParam);原声明的最简化版:pFunx b[10];3. 原声明:doube(*)() (*e)[9];变量名为e,先替换左边部分,pFuny为别名一:typedef double(*pFuny)();再替换右边的变量e,pFunParamy为别名二typedef pFuny (*pFunParamy)[9];原声明的最简化版:pFunParamy e;理解复杂声明可用的“右左法则”:从变量名看起,先往右,再往左,碰到一个圆括号就调转阅读的方向;括号内分析完就跳出括号,还是按先右后左的顺序,如此循环,直到整个声明分析完。
举例:int (*func)(int *p);首先找到变量名func,外面有一对圆括号,而且左边是一个*号,这说明func 是一个指针;然后跳出这个圆括号,先看右边,又遇到圆括号,这说明(*func)是一个函数,所以func是一个指向这类函数的指针,即函数指针,这类函数具有int*类型的形参,返回值类型是int。
C语言中typedef用法

使用 typedefs 为现有类型创建同义字。
定义易于记忆的类型名
typedef 使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,位于 ''typedef'' 关键字右边。例如:
C语言中typedef用法
1. 基本解释
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
typedef void (*pFunParam)();
//整体声明一个新类型
typedef void (*pFun)(pF
unParam);
//使用定义的新类型来声明对象,等价于void (*b[10]) (void (*)());
size len = file.getlength();
std::vector <size> vs;
typedef 还可以掩饰符合类型,如指针和数组。例如,你不用象下面这样重复定义有 81 个字符元素的数组:
char line[81];
char text[81];
定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样:
根据我们上面的阐述可以知道:新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode。
解决这个问题的方法有多种:
typedef class用法

一、typedef关键字的作用typedef 是C语言中用来定义新数据类型的关键字,它可以给现有的数据类型起一个新的名字。
通过typedef关键字,我们可以简化复杂数据类型的使用,增强程序的可读性和可维护性。
二、typedef的语法格式typedef 的语法格式如下:typedef 原类型名新类型名;其中,原类型名可以是基本数据类型(int、char、float等)、结构体、联合体或枚举类型,新类型名是我们想要定义的新类型的名称。
三、使用typedef定义基本数据类型1. 定义int类型我们可以使用typedef定义一个新的int类型:typedef int Integer;这样,我们就可以用Integer代表int类型,使用起来更加直观和易读。
2. 定义char类型同样的,我们也可以使用typedef定义一个新的char类型:typedef char Letter;这样,我们就可以用Letter代表char类型,使得代码更加易懂。
3. 定义float类型typedef关键字也可以用来定义新的float类型:typedef float Realnum;这样,我们就可以用Realnum代表float类型,让程序更易读易懂。
四、使用typedef定义结构体类型1. 定义结构体类型通过typedef关键字,我们可以给结构体类型起一个新的名字:typedef struct{int age;char name[20];} Person;这样,我们就可以使用Person代表这个结构体类型,方便我们在程序中使用。
2. 定义结构体类型的指针我们还可以使用typedef定义结构体类型的指针,例如:typedef struct{int age;char name[20];} Person, *PersonPtr;这样,我们可以使用PersonPtr代表指向该结构体类型的指针,使得代码更加清晰易懂。
五、使用typedef定义联合体类型1. 定义联合体类型typedef关键字还可以用来定义联合体类型,例如:typedef union{int i;char c;float f;} Data;这样,我们就可以用Data代表这个联合体类型,方便我们在程序中使用。
c语言中typedef用法

c语言中typedef用法在C语言中,`typedef`是一个关键字,用于为已知的数据类型定义一个新的名字。
这个新名字可以让变量更具描述性,或者简化一些复杂的类型声明。
`typedef`的作用相当于为现有类型创建一个别名。
`typedef`的用法有以下几种:1. 为基本数据类型定义别名:```ctypedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;```在这个例子中,`size`、`u16`和`u8`分别是`unsigned int`、`unsigned int16`和`unsigned int8`的别名。
2. 为结构体定义别名:```ctypedef struct tagMyStruct {int iNum;long lLength;} MyStruct;```这个例子中,`MyStruct`是一个结构体的别名,该结构体包含两个成员:`int iNum`和`long lLength`。
3. 为枚举类型定义别名:```ctypedef enum {yes,no} YesNo;```在这个例子中,`YesNo`是`enum`类型的别名,包含两个枚举值:`yes`和`no`。
4. 为数组定义别名:```ctypedef uint8 MyArray[6];```这个例子中,`MyArray`是一个包含6个`uint8`类型元素的数组的别名。
总之,`typedef`在C语言中的主要用途是为现有数据类型创建别名,以便让变量更具描述性或简化类型声明。
typedef定义的新类型名与其对应的原类型名具有相同的语法和语义,但具有更清晰的含义。
typedef用法

以上的定义可以分为两步形成
第一步:定义结构体 struct LNode{ ElemType data; struct LNode *next; }; 第二步:利用typedef定义别名 typedef struct LNode LNode; typedef struct LNode *LinkList; //所以明显LinkList 是结构体指针的名称
printf("\nb id a type of ARR2,b= \n"); for(i = 0;i<4;i++) for(j = 0;j<4;j++) b[i][j] = i+j+2; for(i = 0;i<4;i++) {for(j = 0;j<4;j++) printf("%3d",b[i][j]); printf("\n");} return 0; } 输出的就是一个 一维数组和 一个二维数组
为什么定义的名称要相同? 请看下面程序: typedef struct LNode { int *elem; int length; }SqList; 比较: 应改为 LNode La,Lb; struct LNode SqList La,Lb;
La,Lb
即:typedef stuct LNode SqList;
类似的可以做如下推广: typedef ARR2 ARR3[4]; //实际上等价于定义ARR3为一个三元数组 typedef int ARR3[4][4][4];
(1) (2) (3) (4) (5) (6)
(7)
typedef用法小结

用typedef来定义与平台无关的类型。
比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:
typedef long double REAL;
在不支持 long double 的平台二上,改为:
typedef double REAL;
原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char* const。
简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就行。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
**************************************************************************************
/* 这个C程序员都知道,就是将DataType定义为int型,便于扩充 */
typedef int DataType;
/* 定义一个一维数组,数组的元素维整型值 */
typedef DataType ARR1[N4];
/* 再定义一个一维数组,数组的元素维ARR1型,不过ARR1又是一个数组,所以
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CC++typedef用法详解(真的很详细)

CC++typedef⽤法详解(真的很详细)第⼀、四个⽤途⽤途⼀:定义⼀种类型的别名,⽽不只是简单的宏替换。
可以⽤作同时声明指针型的多个对象。
⽐如:char* pa, pb; // 这多数不符合我们的意图,它只声明了⼀个指向字符变量的指针,// 和⼀个字符变量;以下则可⾏:typedef char* PCHAR; // ⼀般⽤⼤写PCHAR pa, pb; // 可⾏,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可⾏,但相对来说没有⽤typedef的形式直观,尤其在需要⼤量指针的地⽅,typedef的⽅式更省事。
⽤途⼆:⽤在旧的C的代码中(具体多旧没有查),帮助struct。
以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名对象名,如:struct tagPOINT1{int x;int y;};struct tagPOINT1 p1;⽽在C++中,则可以直接写:结构名对象名,即:tagPOINT1 p1;估计某⼈觉得经常多写⼀个struct太⿇烦了,于是就发明了:typedef struct tagPOINT{int x;int y;}POINT;POINT p1; // 这样就⽐原来的⽅式少写了⼀个struct,⽐较省事,尤其在⼤量使⽤的时候或许,在C++中,typedef的这种⽤途⼆不是很⼤,但是理解了它,对掌握以前的旧代码还是有帮助的,毕竟我们在项⽬中有可能会遇到较早些年代遗留下来的代码。
⽤途三:⽤typedef来定义与平台⽆关的类型。
⽐如定义⼀个叫 REAL 的浮点类型,在⽬标平台⼀上,让它表⽰最⾼精度的类型为:typedef long double REAL;在不⽀持 long double 的平台⼆上,改为:typedef double REAL;在连 double 都不⽀持的平台三上,改为:typedef float REAL;也就是说,当跨平台时,只要改下 typedef 本⾝就⾏,不⽤对其他源码做任何修改。
c语言typedef struct的用法

c语言typedef struct的用法typedef 是 C 语言中的一个关键字,它可以为一个类型定义一个新的名称。
struct 是C 语言中的一个关键字,它可以用来定义一种复合数据类型(结构体)。
在C 语言中,可以使用typedef struct 来给结构体类型起一个新的名字,这样就可以使用这个新名字来定义变量了。
举个例子:typedef struct {int age;char name[20];} Person;上面的代码定义了一个结构体类型Person,其中包含一个整型变量age 和一个字符数组name。
然后可以如下使用:Person p1;p1.age = 25;strcpy(, "John");此时可以使用Person 作为结构体类型。
如果使用了上面的typedef,那么就可以这样定义结构体变量了:Person p1;p1.age = 25;strcpy(, "John");这样就可以不用写struct Person,而只需要Person p1;这样就可以直接定义结构体变量了。
当然,还可以使用指针来定义结构体变量。
例如:Person *p2;p2 = (Person *)malloc(sizeof(Person));这样就可以通过指针来访问结构体中的成员变量。
p2->age = 30;strcpy(p2->name, "Mary");这样就可以使用结构体指针来访问结构体成员变量了。
简单来说,typedef struct 可以给结构体类型起一个新名字,便于代码的可读性。
这样就可以简化结构体变量的定义和访问,使得代码更简洁易读。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言typedef用法总结
黄海涛,2012-3-11
C语言中的typedef可以让人感觉很清新,但也可以让人感觉神秘。
当你一层层剥开它的时候,神秘的面纱终会摘下……
让我们一起来探究其中的秘密吧!
一、概述
1、类型定义符typedef
C语言提供了一个称为typedef的工具,它允许你为各种数据类型定义新的名字。
定义形式:
typedef 原类型名新类型名;
它的格式与变量声明完全一样,只是把typedef这个关键字放在声明的前面,但typedef并不创建变量,而是为指定类型引入一个新的名字。
2、实质
其实质是:为现有类型取个新名字,它并没有引入新的类型。
typedef是一种声明形式,它为一种类型引入新的名字,而不是产生新的类型,也不会为变量分配空间。
3、作用时机
在某些方面,typedef类似于宏文本替换,但typedef是类型定义符,在编译时会有相应类型的检查。
typedef是由编译器解释的。
▲typedef与#define的区别
A.#define后面没有分号,而typedef后面有分号;
B.#define不是关键字,而typedef是关键字;
C.宏定义中宏名紧跟着#define,而typedef中的类型名并不紧接其后;
D.可以用其他类型说明符对宏名进行扩展,但对typedef定义的类型名却不行;例如:
E.在连续几个变量声明中,typedef定义的类型名可以保证声明中所有的变量均为同一种类型,而#define定义的宏名则无法保证。
4、使用原因
1)表达方式更简洁,简化编程;
2)使程序参数化,提高程序的可移植性;
3)为程序提供更好的说明性,可以引入一个易记且意义明确的新名字,提升可维护性。
5、缺点
允许一些看上去混乱的语法,可以把几个声明放在一个声明中。
如:
二、使用typedef声明定义时的限制
1、
2、
3、
存储类关键字:auto、extern、register、static与typedef
但在存储类说明符中,typedef是个例外,它不会真正影响对象的存储特性。
其他存储类说明符确定所声明对象的生存期。
三、typedef基本数据类型
typedef的一个重要用途就是声明定义机器无关的类型名,提高程序的可移植性。
像操作硬件设备等使用长度明确的数据,对应的类型长度也应该明确。
在32位机器上
如果要将程序移植到另一个平台,程序中使用的是typedef的新类型名,那么移植时修改typedef中相应信息即可。
四、typedef构造类型
C语言中的构造类型主要包括:数组类型、结构体类型与共用体类型。
1
2
结构体中的问题:
C语言允许在结构体中包含指向它自己的指针,在建立链表等数据结构时可以看到大量这样的例子。
解决办法有多种:
五、typedef指针类型
1、
解决办法:在typedef时指明const类型限定符
2、
3、
4、
有人可能会问,会有程序员写这样的代码吗?它有什么用呢?典型的例子是signal()原型的声明,signal()是一个系统调用,用于通知运行时系统,当某种特定的“软件中断”发生时调用特定的程序。
你可以通过参数传递告诉它中断的类型以及用于处理中断
由于水平有限,文中肯定存在很多不足之处,恳请阅读者批评指正,相互交流,学习提高。
六、参考资料
1、《C程序设计》(第三版):谭浩强著,清华大学出版社2005.07
2、《C程序设计语言(The C Programming Language)》(第2版中英文版):(美)Brian
W.Kernighan,Dennis M.Ritchie著,徐宝文李志译,机械工业出版社2004 年1月
3、《C专家编程(Expert C Programming)》(中英文版):(美)林登(LinDen,P.V.D)著,
徐波译,人民邮电出版社2002.12
4、《C陷阱与缺陷(C Traps And Pitfalls)》(中英文版):(美)Andrew Koenig著,高巍译,
人民邮电出版社2003
5、《C语言深度解剖》陈正冲著,北京航空航天大学出版社2010
6、《C语言参考手册(C:A Reference Manual)》(第五版):(美)Samuel P.Harbison III,Guy
L.Steele Jr.著,邱仲潘等译,机械工业出版社2003 年8月
7、《想成为嵌入式程序员应知道的0x10个基本问题.doc》作者:Jones Nigel。