[typedef]typedef的高级用法

原创 2015年07月11日 00:18:47
   问题描述:之前对typedef的认识还是限于易于移植的层面,经常用到typedef unsigned int U32;之类的类型别名。对于typedef的更多高级的用法了解很少,于是查找资料进行了学习。typedef和define的用法有些相同,但是差别也是很大的。两者的相同大概就是具有一个简化替换的作用,但define是纯粹的字符替换,而typedef是为定义的复杂类型起了简单的别名。define是宏,#define U32 unsigned int, 而typedef是类型定义,别名一般不像define一样在前面,而且要用“;”结束。
   高级用法:
   1. 如指针、数组一类的新类型定义:
typedef char Line[81];//这里为具有81个字符元素的数组类型起了个别名叫Line
Line text,secondline;//定义text和secondline两个具有81个字符元素的数组,即char text[81];                                //char secondline[81];
typedef char *pstr;//这里为指向字符变量的指针类型起了个别名叫pstr
pstr p1;//定义了p1指针,即char *p1;
   2. 有const的特殊情况:
typedef char *pstr;
const pstr p1;//这样使用是有问题的,typedef后不是简单的替换,不会成为const char *p1;而是会将p1指定               //为const限定
   3. 结构中包含指向其自身的指针时:
////////////////////////////////////////////////
typedef struct tagNode
{
    char *pItem;
    pNode pNext;
}*pNode;//这样是错误的,类型本身尚未建立完成而使用pNode,编译器此时是不认识pNode的
////////////////////////////////////////////////
以下是三种可行的方式:
////////////////////////////////////////////////
typedef struct tagNode
{
    char *pItem;
    struct tagNode *pNext;
}*pNode;
////////////////////////////////////////////////
typedef struct tagNode *pNode;
struct tagNode
{
    char *pItem;
    pNode pNext;
};
////////////////////////////////////////////////
struct tagNode
{
    char *pItem;
    struct tagNode *pNext;
};
typedef struct tagNode *pNode;//这种是规范做法
////////////////////////////////////////////////
   4. 对复杂变量建立类型别名的方式:
    只要在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头就行了。

例1:int *(*a[5])(int, char*);//这是一个函数指针数组,函数的输入参数为int和char*类型,返回值为int型的指针

typedef int *(*pFun)(int, char*);//pFun是建的一个类型别名

pFun a[5];//使用定义的新类型来声明对象,等价于int* (*a[5])(int, char*);

例2:void (*b[10]) (void (*)());

typedef void (*pFunParam)();//首先为上面表达式(void (*)())部分声明一个新类型

typedef void (*pFun)(pFunParam);//整体声明一个新类型

pFun b[10];//使用定义的新类型来声明对象,等价于void (*b[10]) (void (*)());

例3:double(*(*pa)[9])();

typedef double(*pFun)();//首先为整体声明一个新类型

typedef pFun (*pFunParam)[9];//再为上面((*pa)[9])部分声明一个新类型

pFunParam pa;//使用定义的新类型来声明对象,等价于double(*(*pa)[9])();

版权声明:本文为博主原创文章,未经博主允许不得转载。

c语言中typedef的几种用法

几种用法:1.常规变量类型定义例如:typedef unsigned char uchar 描述:uchar等价于unsigned char类型定义 uchar c声明等于unsigned char...
  • drdairen
  • drdairen
  • 2016年07月07日 09:41
  • 8485

一次读懂C语言typedef的用法

要学懂typedef,你要有一本讲c的语法数,同时配上这篇文章即可。 本文将typedef总结为四个用途,两个陷阱...
  • u012676933
  • u012676933
  • 2016年11月08日 10:15
  • 709

关于typedef的用法总结(真理真是越辩越明)

不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些...
  • u012548562
  • u012548562
  • 2014年10月28日 10:45
  • 1080

C语言声明及typedef常见用法

C语言声明的优先级规则 A 声明从它的名字开始读取,然后按照优先级顺序依次读取 B 优先级从高到底依次是:   B.1 声明中被括号括起来的那部分   B.2 后缀操作符:       括号()表示这...
  • wangpeihuixyz
  • wangpeihuixyz
  • 2014年04月03日 23:20
  • 1194

typedef_struct_用法详解和小结

1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用type...
  • fushiqianxun
  • fushiqianxun
  • 2012年08月31日 17:01
  • 1330

C语言typedef详解

在C还是C++代码中,typedef都使用的很多。typedef与#define有些相似,其实是不同的。基本定义:typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2016年02月17日 16:51
  • 8589

OC之【typedef的使用】

// #define Integer int // 给基本数据类型起别名 void test() {     typedef int Integer;          type...
  • superchaoxian
  • superchaoxian
  • 2013年12月01日 17:51
  • 3858

我所认为的 typedef关键字 的用法

typedef的通俗理解:     为现有类型创建一个新的名字。     typedef定义从关键字typedef开始,后面跟数据类型和标识符。标识符和数据类型没有引入新的标识符,而是现有类型数据...
  • Strong_HCyouth
  • Strong_HCyouth
  • 2016年12月02日 20:40
  • 232

typedef , enum , typedef enum 理解

转载地址: http://blog.csdn.net/lvxiangan/article/details/20939379 enum和enum typedef 在IOS中的使用 ...
  • qiuyinthree
  • qiuyinthree
  • 2015年01月19日 23:13
  • 2229

typedef enum 和enum详细用法

枚举(enum)通过一种简单的途径,把一串名字与一串整形值联系在一起。可以代替#define声明   枚举一般形式:                           enum 可选标签{ 内容...
  • asn1111
  • asn1111
  • 2017年08月23日 19:39
  • 152
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[typedef]typedef的高级用法
举报原因:
原因补充:

(最多只允许输入30个字)