在C语言中typedef是什么意思干什么用的
发布时间:2025-05-15 15:19:06 发布人:远客网络
一、在C语言中typedef是什么意思干什么用的
typedef是C/C++常用语法,typedef作用,归结起来,可以分为四种:
常规的应用中,想要定义两个字符指针,写下如下代码: char*a, b
上述代码是错误的,只有a为字符指针,b仍旧为字符变量。通过#define进行宏定义,仍然是无效的,因为宏定义仅仅是字符替换。
(9)tagPOINT1 p1,p2;//此句编译无法通过
(10)//错误信息:error: unknown type name'tagPOINT1'
(1)struct tagPOINT1 p1,p2;//必须有关键字 struct
(2)采用typedef,则可以省掉结构体定义时的struct
(8)POINT p1;//这样就比原来的方式少写了一个struct。
程序编写中,如果考虑到平台移植的因素,则需要从代码中抽象出硬件层的差异,例如,变量所占空间,端模式等等。
考虑一个浮点型变量,在不同的硬件平台上,所占据的空间有可能不同,此时,可以采用typedef将其定义到单独的头文件内,该头文件是纯粹抽象硬件相关的内容:
这样的话,如果将来考虑到程序的移植,只需要修改该头文件即可。
复杂的声明形如:void(*b[10])(void(*)());
意思:首先*b[10]为指针数组,它里面的十个元素全是指针。到底是什么指针呢,是一个返回类型为空,形参为空的函数指针。
这种复杂的声明,可以用typedef进行简化:
(1)typedef void(pFunParam*)();
(1)typedef void(*pFunx)(pFunParam);
本文档在撰写过程中,参考了网络博客typedef用法
而然这个声明在gcc下编译时不通过的,按照作者的本意,似乎应该这样声明:
e是一个指向9维数组的指针,数组内为函数指针,该函数指针形参为空,返回类型为double。
这样的话,应该采用这样的typedef来简化声明:
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
参考资料来源:百度百科-typedef
二、单片机C语言中typedef和define的区别是什么
1)#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
程序中的:area=PI*r*r会替换为3.1415926*r*r
如果你把#define语句中的数字9写成字母g预处理也照样带入。
2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。
作用都是用int_ptr代表 int*,但是二者不同,正如前面所说,#define在预处理时进行简单的替换,而typedef不是简单替换,而是采用如同定义变量的方法那样来声明一种类型。也就是说;
int_ptr a, b;//相当于int* a, b;只是简单的宏替换
int_ptr a, b;//a, b都为指向int的指针,typedef为int*引入了一个新的助记符
//QunKangLi(维护成本与程序员的创造力的平方成正比)
const pint p;//p不可更改,但p指向的内容可更改
const PINT p;//p可更改,但是p指向的内容不可更改。
pint是一种指针类型 const pint p就是把指针给锁住了 p不可更改
而const PINT p是const int* p锁的是指针p所指的对象。
3)也许您已经注意到#define不是语句不要在行末加分号,否则会连分号一块置换。
三、typedef在c语言中是什么意思
1、typedef struct是定义一个标识符及关键字的别名,无具体含义。它是语言编译过程的一部分,为了使用结构体方便。
2、例:typedef struct tagMyStruct MyStruct。因此,MyStruct实际上相当于struct tagMyStruct,可以使用MyStruct varName来定义变量。
3、在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。
4、typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
5、在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
6、结构别名:只是结构的标示符——结构体类型。
7、在C语言中,struct不能包含函数。在C++中,对struct进行了扩展,可以包含函数。
8、typedef常用来定义关键字、冗长的类型的别名。宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。