它的意思简单明了,就是定义一种类型的别名,但是怎么去理解?我自己的理解是把变量定义为一种类型.下面给出实例来解释我的理解.
例一
int integer;定义一个int类型的变量,变量名称是integer.很好理解,再改变为typedef int integer;这下有点不同了,integer不再是一个变量,而是一个类型了,可以用来直接定义,比如integer i,j,k;这是可以的,i,j,k这三个变量的类型就是把integer做为变量看待时的类型,也就是int类型,因为把把integer做为变量看待时,integer是int类型.typedef int integer;integer i,j,k;这两句连起来就是定义了i,j,k三个变量,它们的类型是int.
例二
int (WINAPI * call)(HWND,LPSTR,LPSTR,UINT);定义一个函数指针,指向的函数类型是返回值是int类型,参数是(HWND,LPSTR,LPSTR,UINT),调用形式为 WINAPI 的这样的函数,我们可以把这个指针指向user32.dll里的MessageBoxA这个函数,为什么可以指向这个函数?因为这个API的返回值是int类型的,而且参数也是(HWND,LPSTR,LPSTR,UINT)这几个类型,调用方式也是WINAPI所有的条件都完全符合了,是不是很巧合呀,因为这是我自己构造出来的嘛,当然什么都一样了~~,使用方法为: int (WINAPI * call)(HWND,LPSTR,LPSTR,UINT);
HMODULE hDll=LoadLibrary("user32.dll");
call=(int(WINAPI * )(HWND,LPSTR,LPSTR,UINT))GetProcAddress(hDll,"MessageBoxA");
FreeLibrary(hDll);
(*call)(NULL,"HI,I AM FROM USER32.DLL","TEST",MB_OK); 要是有一个函数指针变量的话,我们的工作该多省呀,不要说我懒嘛,每次都写这么长的一串也是很容易出错的嘛,是不是?现在有了typedef,我们解放了,
typedef int (WINAPI * call)(HWND,LPSTR,LPSTR,UINT);
call 原来是一个函数指针变量,现在加了typedef后,call不再是一个变量了,而是一种类型,叫做函数指针类型,指向返回值为int,参数是(HWND,LPSTR,LPSTR,UINT),调用形式为WINAPI的函数的指针类型,我们可以用它来直接定义变量了,则原来的代码可以写为 typedef int (WINAPI * call)(HWND,LPSTR,LPSTR,UINT); call mycall;//定义一个函数指针变量 HMODULE hDll=LoadLibrary("user32.dll");mycall=(call)GetProcAddress(hDll,"MessageBoxA"); FreeLibrary(hDll);
(*mycall)(NULL,"HI,I AM FROM USER32.DLL","TEST",MB_OK);
最神奇的是
typedef int (WINAPI * call)(HWND,LPSTR,LPSTR,UINT);
call mycall;//定义一个函数指针变量
HMODULE hDll=LoadLibrary("user32.dll");mycall=(call)GetProcAddress(hDll,"MessageBoxA");
FreeLibrary(hDll);
(*mycall)(NULL,"HI,I AM FROM USER32.DLL","TEST",MB_OK);