b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

[typedef] typedef的高级用法

电脑杂谈  发布时间:2020-06-25 15:01:31  来源:网络整理

typedef enum_typedef和define的区别_typedef用法

问题描述: 以前对typedef的理解仍然仅限于易于移植的级别,并且类型别名(如typedef unsigned intU32)也是如此. 经常使用. 对于typedef的更高级用法知之甚少,因此我搜索了信息并进行了研究. typedef和define的用法有些相同,但是区别也很大. 两者之间的区别可能是简化的替换,但是define是纯字符替换,而typedef是定义的复杂类型的简单别名. define是一个宏,#defineU32 unsigned int,typedef是一个类型定义typedef用法,别名通常不像define那样位于最前面,并且必须以“;”结尾.

高级用法:

1. 新的类型定义,例如指针和数组:

typedef char Line [81]; //这里有81个字符元素的数组类型的单独名称称为Line

行文本,第二行; //为文本和第二行定义两个具有81个字符元素的数组,即chartext [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限制

typedef和define的区别_typedef enum_typedef用法

3. 当结构包含指向自身的指针时:

///////////////////////////////////////////////// // /

typedef struct tagNode

{

char * pItem;

pNode pNext;

} * pNode; //这是错误的,类型本身尚未创建并使用pNode,编译器此时不知道pNode

///////////////////////////////////////////////// // /

以下是三种可能的方式:

///////////////////////////////////////////////// // /

typedef enum_typedef和define的区别_typedef用法

typedef struct tagNode

{

char * pItem;

struct tagNode * pNext;

} * pNode;

///////////////////////////////////////////////// // /

typedef struct tagNode * pNode;

struct tagNode

{

char * pItem;

typedef和define的区别_typedef enum_typedef用法

pNode pNext;

};

///////////////////////////////////////////////// // /

struct tagNode

{

char * pItem;

struct tagNode * pNext;

};

typedef struct tagNode * pNode; //这是标准做法

///////////////////////////////////////////////// // /

typedef enum_typedef和define的区别_typedef用法

4. 为复杂变量创建类型别名的方法:

只需在传统变量声明表达式中用类型名称替换变量名称,然后将关键字typedef添加到语句的开头即可.

示例1: int *(* a [5])(inttypedef用法,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); //从整体上声明一个新类型

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

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

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

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

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


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-257979-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...