CSDN博客

img ChinaShrimp

函数指针的相关用法

发表于2004/6/30 13:45:00  730人阅读

定义一个指向函数的指针,例如:

int cuckoo(int baby);

则可以这样来定义一个指向该函数的指针:

int (*pCuckoo)(int);

如果想定义所有函数指针的类型(可以方便的声明多个变量),则可以这样来做:

typedef int(*)(int)   FunPointerType;

利用该类型声明一个函数指针如下:

FunPointerType   pCuckoo;

FunPointerType   pShrimp;

好了,既然我们有了函数指针,那么怎么样来对其进行初始化呢?

It's a piece of cake!

pCuckoo   = &cuckoo;

pShrimp    = &cuckoo;

ok, 怎么使用他们呢?废话少说,很简单:

pCuckoo(3);

or (*pCuckoo)(3);

就这么简单了!

不过在实际使用过程中,有些函数的参数就是一个函数指针,例如:

void Test(int(*f)(int));

那么怎么调用Test呢?更简单了:

Test(pCuckoo);

呵呵,是不是大功告成?

别急,有时候我们会碰到这样一个问题,如果想把一个类中的成员函数当作参数传给Test,也可以这样子做吗?

呵呵,你试一下:

Class A

{

A()

{

   Test(try);

};

~A();

int try(int nTimes);

}

哼哼,编译器会毫不留情地告诉你,有问题了!

为什么会这个样子呢?答案也比较简单:所有成员函数的参数列表中都隐藏了一个this指针(记起来了吧?),这样的话,try成员函数的参数列表当然与Test函数所需要的不同了,编译器不报错就怪了!

怎么办?还是比较简单:

解决方案就是将这个成员函数改成static,这样就ok了!

好了,还有什么我没有说清楚的吗?请发email至alittleshrimp@gmail.com 欢迎骚扰!:)

0 0

相关博文

我的热门文章

img
取 消
img