有typedef与没有typedef的函数指针的区别
本人初学C++,昨天问了一个问题:
#include "stdafx.h"
#include "afx.h "
int main(int argc, char* argv[])
{
typedef int(WINAPI*pSum)(int a,int b);
HINSTANCE hDLL;
pSum SumFunc;
hDLL=LoadLibrary("test.dll");
SumFunc=(pSum)GetProcAddress(hDLL,"Sum1");
printf("%d\n",SumFunc(5,8));
FreeLibrary(hDLL);
return 0;
}
不明白 pSum SumFunc 是什么意思
---------------
大家都说pSum是函数指针,我也知道是函数指针,但为什么函数指针能声明实例没人能解释.
我知道可以把一个函数的地址赋给函数指针,但函数指针能声明实例(pSum SumFunc)见的少.
而且只有在定义函数指针前面有typedef的函数指针,才可以声明实例(例如:pSum SumFunc),没有typedef的函数指针是不能声明实例. 下面举例说明:下面2个的结果是一样的,但写法不一样.
1.
#include "stdafx.h"
int Sum(int a,int b)
{return a+b;}
int main(int argc, char* argv[])
{
typedef int(*pSum)(int a,int b);
pSum test;//可以声明实例,也许是typedef起的用
test=Sum;
printf("%d\n",test(16,2));
return 0;
}
2.
#include "stdafx.h"
int Sum(int a,int b)
{return a+b;}
int main(int argc, char* argv[])
{
int(*pSum)(int a,int b);
// pSum test; 这样写是错误的,在这里不能象前面那个例子用函数指针声明实例
pSum=Sum;
printf("%d\n",(*pSum)(16,2));
return 0;
}