函数指针的理解

起因是读不懂typedef void (*lpFun)(void); 这句,所以开始搜索学习。

 同时可参照“用typedef定义类型总结。”http://blog.csdn.net/yjkwf/article/details/5445351

*****************************************************

下面的程序说明了函数指针调用函数的方法:

例一、

#include<stdio.h>

int max(int x,int y){ return(x>y?x:y); }

int main()

{

int (*ptr)(int, int);

int a,b,c;

ptr=max;

scanf("%d%d",&a,&b);

c=(*ptr)(a,b);

printf("a=%d,b=%d,max=%d",a,b,c);

}

*****************************************************

 

其中int (*ptr)(int, int); 定义了一个返回类型为int 参数为两个int的函数指针 ptr。

 按照这种理解 typedef void (*lpFun)(void);

void (*lpFun)(void); 定义一个返回类型为void,参数为void的函数指针 lpFun.

该函数指针指向 类似于 void Foo(void)函数的函数入口地址、

 lpFun pShowDlg = (lpFun)GetProcAddress(hDll,"ShowDlg");//指的是ShowDlg的返回为void 参数为void

 

 

 

定义一个函数指针类型。
比如你有三个函数:
void hello(void) { printf("你好!"); }
void bye(void) { printf("再见!"); }
void ok(void) { printf("好的!"); }

typdef void (*funcptr)(void);
这样就构造了一个通用的函数
你用的时候可以这样:
void speak(int id)
{
funcptr words[3] = {&hello, &bye, &ok};
funcptr fun = words[id];
(*fun)();
}

这样的话,如果speak(0)就会显示“你好!”
speak(1)就会显示“再见!”
speak(2)就会显示“好的!”

用于处理参数和返回值的形式都一样,但是功能不确定的一组函数,可以使用函数指针

比如算术运算符,加、减、乘、除,都可以用typedef int (*calc)(int,int)代表,等等

 

 

 

 

比如:
#include<iostream>
#include<stdlib.h>
using namespace std;

typedef void ( *funcptr)(void); //定义指针类型

void fun1(void) //定义函数一
{
cout << "This is fun1" << endl;
}

void fun2(void) 定义函数二
{
cout << "This is fun2" << endl;
}

int main()
{
funcptr p1; //定义了一个该类型的指针p1
p1 = fun1; //p1指向函数一
p1();

p1 = fun2; //p1指向函数二
p1();

system("pause");
}

 

 

 

 

HMODULE hModule=GetModuleHandle("kernel32.dll");

if (hModule)
  {
  typedef DWORD (CALLBACK *LPFNREGISTER)(DWORD,DWORD);
  LPFNREGISTER lpfnRegister;
  lpfnRegister=(LPFNREGISTER)GetProcAddress(hModule,"RegisterServiceProcess");
  if (lpfnRegister)
  {
  (*lpfnRegister)(NULL,1L);
  }
  }

typedef DWORD (CALLBACK *LPFNREGISTER)(DWORD,DWORD); 定义函数指针类型LPFNREGISTER 返回值类型DWORD 函数指针有两个DWORD类型的参数。

LPFNREGISTER lpfnRegister;  函数指针实例化。

函数指针的理解

上一篇:Coreldraw(CDR)设计绘制漂亮卡通MM头像实例教程


下一篇:PS修图:美女照片的磨皮和锐化