[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])();

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

相关文章推荐

关于typedef的用法总结.pdf

  • 2014年01月17日 11:00
  • 172KB
  • 下载

typedef用法小结

  • 2017年08月05日 16:55
  • 46KB
  • 下载

C专家编程精华篇----头疼的C语言声明:const、typedef、define及函数高级声明

**************const有关的变量声明***************** (1)const == read-only const修饰的变量被许多人错误的认为是常量,但是const所修...

Typedef用法小结01

  • 2017年02月05日 17:39
  • 44KB
  • 下载

关于typedef的用法总结

  • 2012年01月08日 23:37
  • 40KB
  • 下载

Unix高级编程:指针、typedef、头文件的使用

一.复习以下C语言(指针、typedef、预处理) (一)指针 指针是地址,这句话是错误的。 "指针是地址的类型"。具体的一个地址是指针类型的。 指针类型 *  整数类型 int 字符类型...

typedef用法小结

  • 2012年12月17日 14:24
  • 646KB
  • 下载

C++_typedef用法详解.pdf

  • 2013年01月14日 16:20
  • 281KB
  • 下载

C++ typedef用法小结 (※不能不看※)

 第一、四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个...

c语言 typedef的用法详解

  • 2011年11月07日 14:37
  • 98KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[typedef]typedef的高级用法
举报原因:
原因补充:

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