typedef用法(在C语言中typedef是什么意思干什么用的)

本文目录
- 在C语言中typedef是什么意思干什么用的
- typedef 用法
- typedef用法
- typedef的用法结构体
- c语言关于typedef的用法
- 关于typedef 的用法
- typedef的使用
- 关于typedef的用法!
在C语言中typedef是什么意思干什么用的
typedef是C/C++常用语法,typedef作用,归结起来,可以分为四种:
1、定义一种类型名
常规的应用中,想要定义两个字符指针,写下如下代码: char *a, b
(1)char* a,b;
(2)char c=’m’;
(3)a=&c;
(4)b=&c;
上述代码是错误的,只有a为字符指针,b仍旧为字符变量。通过#define进行宏定义,仍然是无效的,因为宏定义仅仅是字符替换。
以下则可行:
(1)typedef char* PCHAR;
(2)PCHAR pa, pb;
2、用于struct结构体
(1)#include 《stdio.h》
(2)struct tagPOINT1
(3) {
(4)int x;
(5)int y;
(6)};
(7)int main()
(8){
(9)tagPOINT1 p1,p2;//此句编译无法通过
(10)//错误信息:error: unknown type name ’tagPOINT1’
(11) //环境:Gcc 4.8.1
(12)}
必须采用如下定义;
(1)struct tagPOINT1 p1,p2;//必须有关键字 struct
(2)采用typedef,则可以省掉结构体定义时的struct
(3)ypedef struct tagPOINT
(4){
(5)int x;
(6)int y;
(7)}POINT;
(8)POINT p1; // 这样就比原来的方式少写了一个struct。
3、跨平台移植
程序编写中,如果考虑到平台移植的因素,则需要从代码中抽象出硬件层的差异,例如,变量所占空间,端模式等等。
考虑一个浮点型变量,在不同的硬件平台上,所占据的空间有可能不同,此时,可以采用typedef将其定义到单独的头文件内,该头文件是纯粹抽象硬件相关的内容:
(1)typedef float REAL;
(2)typedef short int INT16;
(3)typedef int INT32
(4)...
这样的话,如果将来考虑到程序的移植,只需要修改该头文件即可。
4、为复杂的声明取别名
复杂的声明形如:void (*b) (void (*)());
意思:首先*b为指针数组,它里面的十个元素全是指针。到底是什么指针呢,是一个返回类型为空,形参为空的函数指针。
这种复杂的声明,可以用typedef进行简化:
首先:声明后面的函数指针:
(1)typedef void (pFunParam *)();
接着声明前面的指针数组:
(1)typedef void (*pFunx)(pFunParam);
原声明的最简化版:
pFunx b;
本文档在撰写过程中,参考了网络博客typedef用法
里面提到一个复杂的声明:
(1)doube(*)() (*e);
而然这个声明在gcc下编译时不通过的,按照作者的本意,似乎应该这样声明:
(1)double (*(*e))();
e是一个指向9维数组的指针,数组内为函数指针,该函数指针形参为空,返回类型为double。
这样的话,应该采用这样的typedef来简化声明:
typedef (*(*ptr))();
扩展资料
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
参考资料来源:百度百科-typedef
typedef 用法
typedef用法如下。
1、隐藏笨拙且难以理解的语法,使用typedef为现有类型创建别名,定义易于记忆的类型名。typedef
还可以掩饰复合类型,如指针和数组。
2、typedef的最简单使用,给已知数据类型long起个新名字,例如叫byte_4。
3、typedef与结构结合使用,这语句实际上完成两个操作:
1)
定义一个新的结构类型。
2)
typedef为这个新的结构起了一个名字,叫MyStruct。
4、typedef和define的问题,typedef要比define要好,特别是在有指针的场合。
5、define宏定义有一个特别的长处:可以使用ifdef
,ifndef等来进行逻辑判断,还可以使用undef来取消定义。
参考资料来源:搜狗百科— typedef
typedef用法
typedef用法:
1、用typedef为现有类型创建别名,定义易于记忆的类型名
2、typedef 还可以掩饰复合类型,如指针和数组。
例如,你不用像下面这样重复定义有 81 个字符元素的数组:
只需这样定义,Line类型即代表了具有81个元素的字符数组,使用方法如下:
同样,可以像下面这样隐藏指针语法:
typedef是在计算机编程语言中用来为复杂的声明定义简单的别名,它与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。
扩展资料
typedef 有另外一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:
typedef long double REAL;
在不支持 long double 的机器上,该 typedef 看起来会是下面这样:
typedef double REAL;
并且,在连 double 都不支持的机器上,该 typedef 看起来会是这样:
typedef float REAL;
你不用对源代码做任何修改,便可以在每一种平台上编译这个使用 REAL 类型的应用程序。唯一要改的是 typedef 本身。
在大多数情况下,甚至这个微小的变动完全都可以通过奇妙的条件编译来自动实现。不是吗?
标准库广泛地使用 typedef 来创建这样的平台无关类型:size_t,ptrdiff 和 fpos_t 就是其中的例子。
此外,象 std::string 和 std::ofstream 这样的 typedef 还隐藏了长长的,难以理解的模板特化语法,例如:basic_string,allocator》 和 basic_ofstream》。
参考资料:百度百科-typedef
typedef的用法结构体
typedef的用法结构体如下:
用在旧的C代码中,帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名对象名,如:
struct tagPOINT1
{
int x;
int y;
};
struct tagPOINT1p1;
而在C++中,则可以直接写:结构名对象名,即:tagPOINT1 p1;
typedef structtagPOINT
{
int x;
int y;
}POINT;
POINT p1; // 这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候,或许,在C++中,typedef的这种用途二不是很大,但是理解了它,对掌握以前的旧代码还是有帮助的,毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。
扩展资料:
typedef的作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的通常有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。
参考资料来源:
百度百科-typedef
c语言关于typedef的用法
这是定义函数指针,因为windows事件机制需要向操作系统注册回调函数,操作系统通过回调函数引发应用程序事件。回调函数就是通过函数指针实现的。函数指针的用法,如:
#include
#include
//定义函数指针
typedef
int
(*pfx)(int,
int);
int
fx(int
a,
int
b)
{
return
a
*
b;
}
int
fy(int
a,
int
b)
{
return
a
+
b;
}
int
main()
{
pfx
pa;
pa
=
fx;
printf(“%d\n“,
pa(3,
4));
//pa(3,
4)
调用的是:fx(3,
4)
pa
=
fy;
printf(“%d\n“,
pa(3,
4));
//pa(3,
4)
调用的是:fy(3,
4)
system(“pause“);
//避免窗口一闪而退
return
0;
}
关于typedef 的用法
typedef struct node
{
int data;
struct node * lchild;
struct node * rchild;
}BINTNODE;
typedef 结构体取了一个别名,叫做BINTNODE
以后用BINTNODE就代表结构体struct node
例如:
typedef int INT;
INT a;//这里的就相当于int a;
typedef BINTNODE *BINTREE;
这就就是给结构体指针取了一个别名
BINTREE就代表struct node*
typedef struct node
{
int data;
struct node * lchild;
struct node * rchild;
}BINTNODE,*BINTREE;
这样写和分开写是一样的效果,没有区别
typedef的使用
是那个王艳萍的书?
typedef UINT(_cdecl*AFX_THREADPROC)(LPVOID);
先把cdecl秒杀 这个关键字是编译器是别的,表示函数函数使用完后自己清除内存区而不是操作系统(当然是编译器帮我们善后的),这个cdecl不用管 他不是主角
typedef UINT(*AFX_THREADPROC)(LPVOID);
先把typedef 去掉 UINT (*AFX_THREADPROC)(LPVOID);看到没有 定义函数的指针变变量(就是回调函数) 所以嘛 ,用AFX_THREADPROC就可以定义一个回调函数,类型就是typedef UINT(*AFX_THREADPROC)(LPVOID);去掉typedef之后那样的.还有不懂吗
关于typedef的用法!
第一句表示:你可以用Point代替2个double元素的数组。double dTest;等价于 Point dTest;
第二句表示:你也已用PointArr代替一个类型为Point的指针,Point代表的是double类型的2元素数组,其本质就是一个double类型的指针(数组的本质就是数组元素的指针),也就是double*;而PointArr是代表Point*,其本质就是double**,也就是double类型指针的指针。
由于你给的代码就2行,我也无法猜测这2行的目的是什么,但是可以肯定的是Point其实就是个double*,PointArr其实就是double**,
你申明的PointArr test=new Point;就是表示申明了一个指针数组,数组里的每个元素都是double*。等价于double** test = new double*;如果你用申请内存的方式看起来不方便,可以暂时理解为 double* test;
test的大小不用考虑了,因为double**还是指针,4字节。
够详细么,上面的例子就是对我陈述的一个验证。你应该看得懂吧

更多文章:
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00






