typedef + 奇特的声明

来源:互联网 发布:亚当斯密 凯恩斯 知乎 编辑:程序博客网 时间:2024/04/20 11:46

简介:C语言中typedef应用非常广泛,其中应用到类型声明非常有趣,现在让我们好好看看


正文:

一、typedef:

a、与#define的区别

          1、与#define,不同,typedef给出的符号名称仅限于类型;

          2、它的解释由编译器,而不是预处理器执行;

          3、typedef范围有限,但是在范围内,比#define更灵活;

b、涵义:

  1、有助于说明自己的意图。EG:typedef unsigned char buye;说明此类型的变量表示数值而非字符编码;

  2、增加可移植性;

二、声明:

a、  int b[][]    //int 数组的数组

int  **ptr //指向int的指针的指针

int  * re[3]//具有3个元素的数组,每个元素都是一个整型指针

int ( * re) [3]//一个指向具有3个元素的整型数组的指针;

int * re[3][4]//一个3*4的数组,每个元素都是一个指向整型的指针

int (* re)[3][4]//一个指针,指向3*4的整型数组

int (* re[3])[4]//一个具有三个元素的数组,每个元素都是一个指向具有4个元素的int 数组的指针

b、诀窍:

[]  ()具有相同的优先级

[]()都是从左到右进行结合

三扩展

1、  typedef int(*timer_callback_fn_t)(void *pData);

 

int (*timer_callback_fn_t) (void *pData);是一个函数指针,所指向的函数有一个参数,参数类型为void *
返回类型为int型。

用个typedef,当你想定义上面那个函数指针变量时,就可以,这样定义

timer_callback_fn_t pMytimer_fn;
去定义一个名为pMytimer_fn的函数指针变量,而不用写成
int (*timer_callback_fn_t) (void *pData) pMytimer;
这么一长串。

指针,你总知道吧,指向字符的指针char *,你也应该知道吧,指向整型的指针,int *,你也应该知道吧,那指向函数的指针呢,这里就是了。

只不过说明一个函数,还要说明这个函数,有无参数,参数什么类型,有几个,有无返回值,返回什么,这么一搞起来,使得函数指针的定义显得非常的罗嗦。

可以用p代替,只是个名字而已,写得长点只是给你一看就知道大概是干嘛用的。

typedef int (*abc) (void *efg);
abc p;

名字是随便取的。





0 0
原创粉丝点击