typedef用法详解

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 也许新手用这个关键字不多,但它却是一个很有用的关键字,可以使代码模块化程度更好(即与其它代码的关联较少),在C++中还是实现Traits技术的基础,也是模板编程的基本语法之一。

若说变量定义是为变量命名,而typedef(或称为类型定义)就是为类型命名。既然都是命名,那就会有很多类似的地方。而变量定义我想大家都会使用,因此类型定义也必然会使用。

类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义。这儿的原本应该是变量的东西,就成为了类型。

如,下面的变量定义:

int integer;     //整型变量
int *pointer;   //整型指针变量
int array [5]; //整型数组变量
int *p_array [5]; //整型指针的数组的变量
int (*array_pointer) [5];//整型数组的指针的变量
int function (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];    //整型指针的数组的类型
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语言中声明变量的时候,有个存储类型指示符(storage-class-specifier),它包括我们熟悉的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 (*pfunc)(int);

             pfunc a[10];

2)、定义一个有10个指针的数组,该指针指向一个函数,该函数有一个函数指针(不带参数,返回值为空)参数,并返回空。

第一种方法:void (*a[10])(void (*)(void));

第二种方法:typedef void (*pfuncParam)(void);

               typedef void (*pfunc)(pfuncParam);

pfunc a[10];

3)、一个指向有10个函数指针(不带参数,返回值为double)数组的指针

第一种方法:double (*)(void) (*p)[10];

第二种方法:typedef double (*pfunc)(void);

             typedef pfunc (*pfuncParam)[10];

             pfuncParam p;

总结:

typedef有两种用法:

一、一般形式,定义已有类型的别名

  typedef   类型    定义名;

二、创建一个新的类型

     typedef   返回值类型   新类型名(参数列表);

http://hi.baidu.com/ctrlaltz/blog/item/890cbbd312eac2033bf3cffe.html

 

 

typedef用法总结 这些高级用法展示了typedef的强大和灵活性,能够使代码更加模块化、可维护并增强类型安全。你可以通过typedef为复杂的类型、结构体、函数指针、数组和指针定义别名,简化代码。提供类型安全,避免类型错误。与#define、条件编译等结合使用,实现更复杂的类型定义。 阅读详情

相关推荐

typedef的使用说明

第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可

大海蓝天的专栏 1190

C语言入门学习 第六天

提示:这是今天的学习笔记,主要学习共用体,枚举,位域,位操作等。

m0_56740689的博客 629

C\C++:另类的理解typedef

我理解的typedef void (*IapFun)(void) 有人问我typedef怎么理解,于是我写了这篇文章,这只是我的个人理解,可能跟别人的理解差别非常大,只是作为我个人笔记,也可能有不对的地方,希望大家指出。 在开发stm32单片机IAP功能时,注意到单片机在接受到新固件后,跳转运行新固件的代码如下: typedef void (*IapFun)(void); jump2app = (iapfun) * (vu32 *)(appxaddr + 4); //用户代码区第二个字为程序开始地址(复位地

Zhichao_Zhang的博客 913

typedeftypedef typename的用法和区别

typedef:是用于定义类型用的 1,为了简化,清晰。比如,vector<list<int *>*> temp(10);可以简化为 typedef list<int *> listnum; typedef vector<listnum *> vectornum; vectornum temp(10);2,定义指向成员的指针。class A{  ...

随意的风的专栏 2942

C++ Primer 4 第十六章 模板和泛型编程

第十六章 模板和泛型编程 1. 模板定义 定义函数模板:函数模板是一个独立于类型的函数,可作为一种方式,产生函数的特定类型版本。模板定义以关键字 template 开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。模板形参表不能为空。           // implement strcmp-like generic compare functi

我的读书笔记(2011-2013) 658

C++ typedef 以及 typedef struct 用法

C++ typedef 以及typedef struct 用法1 概述2 typedef作用及用法3 区别 #define4 typedef struct在c/c++中的区别4.1区别一4.2区别二5 参考资料 1 概述 typedef 为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 typedef 本身是一种存储类的关键字,与 auto、extern、static、register 等关键字不能出现在同一个表

liuluan03161009的博客 8221

Typedef Struct 用法详解

Typedef Struct 用法详解 一、typedef用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。 实例像: typedef int INT; typedef int ARRAY[10]; typedef (int*) pINT; typedef可以增强程序的可读性,以及标识符的灵活性...

PengCoX 9928

C++ 中typedef用法总结

在总结中,比较简单的我只是做了简略的总结,对我来说比较难理解的做了重点的解析。用于为基本数据类型定义一个新的名字,使代码更具可读性或便于修改。示例:这里将int类型定义为Integer,之后就可以使用Integer来声明变量,就像使用int一样。这种方式在代码中如果需要频繁使用int类型,并且希望提高代码可读性(例如,Integer可能暗示这个int变量在特定的业务逻辑中有特殊含义)或者在需要修改类型时(比如将int改为long),只需要修改typedef语句即可。在深入typedef

small__dogs的博客 4512

C++ typedef用法详解

typedef的4种常见用法:1. 给已定义的变量类型起个别名;2. 定义函数指针类型;3. 定义数组指针类型;4. 为复杂的声明定义一个新的简单的别名

Jason_Lee155的博客 3228

C/C++ typedef用法详解

一、typedef简介 typedef的4种常见用法: 1、给已定义的变量类型起个别名 2、定义函数指针类型 3、定义数组指针类型 4、为复杂的声明定义一个新的简单的别名 总结一句话:“加不加typedef,类型是一样的“,这句话可以这样理解: 没加typedef之前如果是个数组,那么加typedef之后就是数组类型; 没加typedef之前如果是个函数指针,那么加typedef之后就是函数指针类型; 没加typedef之前如果是个指针数组,那么加typedef之后就是指针数组类型; typedef cha

ZHE21 1万+

python typedef用法_typedef用法,C语言typedef详解

C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称,来替代系统默认的基本类型名称、数组类型名称、指针类型名称与用户自定义的结构型名称、共用型名称、枚举型名称等。一旦用户在程序中定义了自己的数据类型名称,就可以在该程序中用自己的数据类型名称来定义变量的类型、数组的类型、指针变量的类型与函数的类型等。例如,C 语言在 C99 之前并未提供布尔类型,但我们可以使用 typedef 关...

weixin_39963830的博客 1111

typedef用法简介

作用 typedef是C语言的一个重要的关键字,是为数据类型的定义一个新的名字。也就是类型的别名。 例: 定义一个int 型变量,并对其赋值,输出变量的值 #include<stdio.h> int main(void) { int a = 10; printf("a = %d", a); return 0; } 如果我想使A代表int类型呢?也就是A是int的别名 #include<stdio.h> typedef int A; int main(void)

shanglala的博客 1万+

typedef用法——c语言

typedef用法

weixin_47783699的博客 1万+

c语言typedef用法

typedef是为现有的类型起一个别名,使使用起来更加的方便,注意一点,它并没有产生新的类型。 typedef int BOOL;为int型起了一个新的别名BOOL。例如下边的代码,BOOL为int的别名,然后就可以直接使用了。 typedef int BOOL; #define TRUE 1 #define FALSE 0 BOOL flag = TRUE; 在结构体中的用法 typ...

Mr.yang 2万+

各种typedef用法详解

typedef是 C 和 C++ 语言中的一个关键字,用于为已有的数据类型定义新的名称(别名)。它的主要作用是增强代码的可读性和可维护性,使得程序员可以更方便地使用复杂数据类型或者简化长类型名的书写。简化复杂类型名称: 使用typedef可以将复杂的类型名简化为一个更简单的别名,提高代码的可读性。跨平台开发: 在跨平台开发中,typedef可以帮助隐藏不同平台下的类型差异,提高代码的可移植性。模块化设计: 有助于将数据类型的定义和使用分离开来,使程序更易于维护和修改。使用typedef

lemonxiaoxiao的博客 856

typedef用法

typedef的4种常见用法: 1、给已定义的变量类型起个别名; 2、定义函数指针类型; 3、定义数组指针类型; 4、定义数组类型。 没加typedef之前如果是个数组,那么加typedef之后就是数组类型; 没加typedef之前如果是个函数指针,那么加typedef之后就是指针类型; 没加typedef之前如果是个指针数组,那么加typedef之后就是指针数组类型; typedef char ...

qq_27446275的博客 991

Typedef Struct 用法详解用法小结

第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。 2. typedef & 结构的问题 当用下面的代码定义一个结构时

sempre20的博客 6372

typedef的详细用法

不太想谈#define, 在题主的例子的这种用法里, 它就是个文本替换工具, 预处理器完成的, 无脑替换, 跟word里的replace一模一样, 不关编译器的事. 我想谈一下typedef. 搞懂了c++创始人写的<the design and evolution of cpp>中的下面这个例子, 有助于你理解typedef: typedef int P(); typedef int Q(); class X { static P(Q); // 等价于`static int Q()`,

寻梦&之璐 4420
上一篇: C++中函数指针数组的使用
下一篇: 《C++ Primer 第四版》笔记与勘误1
SearchLife
博客等级 码龄20年 51粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值