ZyLiu's Blog

typedef与函数指针

字数统计: 342阅读时长: 1 min
2018/07/25 Share

typedef基本

今日在代码中看到:

1
2
3
4
5
6
typedef void (ISSCALLBACK *Proc_MVWOnMsgProc)(
const void* pUsrArg, /* [In] User defined parameter */
unsigned int uMsg, /* [In] The message identifier */
unsigned int wParam, /* [In] Message additional information */
const void* lParam /* [In] Message additional information */
);

一时之间无法理解其意义,发觉自己对typedef以及函数指针有些生疏,现在重新整理二者用法。

首先看一个变量定义与typedef的区别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
unsigned int number1;//number为 unsigned int 型

typedef unsigned int number2;//使用number2定义的变量为 unsigned int 型

enum ISS_TTS_CODEPAGE {
ISS_TTS_CODEPAGE_GBK = 936,
ISS_TTS_CODEPAGE_UTF16LE = 1200,
ISS_TTS_CODEPAGE_UTF8 = 65001
} ISSTTSCodePage;
//ISSTTSCodePage为ISS_TTS_CODEPAGE类型的enum

typedef enum ISS_TTS_CODEPAGE {
ISS_TTS_CODEPAGE_GBK = 936,
ISS_TTS_CODEPAGE_UTF16LE = 1200,
ISS_TTS_CODEPAGE_UTF8 = 65001
} ISSTTSCodePage2;
//ISSTTSCodePage定义的变量为ISS_TTS_CODEPAGE类型的enum
ISSTTSCodePage2 someitem;

可以看出原有的定义加上typedef就将其转化为定义原定义的类型。

函数指针

再来说函数指针,举最简单的例子:

1
char (*PTRFUN)(int);

表示PTRFUN指向一个形参为int返回值为char的函数

若是加上typedef

1
typedef char (*PTRFUN)(int);

则可以用PTRFUN来定义函数,特别是用在回调函数上:

1
int callbackfunc(int num, bool torf, PTRFUN somefunc);

typedef数组指针

今天又在代码中看到:

1
2
3
#define BUFSIZE (3200)
typedef byte BUFFER[BUFSIZE];
BUFFER *m_pBuffer = new BUFFER[BUFNUM];

有点迷惑new出来的是byte[10][3200]还是byte[3200][10]
其实看m_pBuffer的类型即可,将*m_pBuffer替换到typedef定义中,即是:

1
byte *m_pBuffer[BUFSIZE];

m_pBuffer为指向byte[3200]的指针,可见new出来的一定是byte[10][3200]

CATALOG
  1. 1. typedef基本
  2. 2. 函数指针
  3. 3. typedef数组指针