指针和函数的各种结合,看到都头疼,以前也看过这方面的,可是不久又忘了,好记性不如赖笔头,做一下整理。
先让自己懵逼一下(类型随意吧)
- int (*p)(int a,int b)
- typedef int(*Multi)(int a, int b);
- int (*)[10] p;
- int* (*fun1)(char * p1,char * p2);
- char * *fun2(char * p1,char * p2);
- char * fun3(char * p1,char * p2);
- ((void() ())0)();
反正我一眼看着很懵逼 还是慢慢来吧
函数指针
- 格式:返回类型(*指针名)(参数)
-
int (*p)(int a,int b)
函数指针p 指向一个函数,该函数返回类型int,该函数还有两个int类型的参数
使用方法如下
#include <iostream>
using namespace std;
int add(int x, int y)
{
return x + y;
}
void print(int(*p)(int x, int y),int a,int b)//将函数指针作为参数,后面的a,b需要加上,因为p中的x,y不可见
{
cout << "this is a print function,the result is " << p(a, b) << endl;
}
int(*funPoint)(int a, int b);//声明一个函数指针
int _tmain(int argc, _TCHAR* argv[])
{
funPoint = add;//funPoint指向add的地址,add后面不能带参数
//下面三种方式等同,结果一样
cout << (*funPoint)(2, 4) << endl;
cout << funPoint(2,4) << endl;
cout << add(2, 4) << endl;
//将函数指针作为参数
print(add, 2, 4);//输出print函数中的结果
return 0;
}
不过这个函数指针,在作为别的函数的参数时,写的好麻烦,需要把自己的参数都带上,print(int(*p)(int x, int y),int a,int b)
能不能简单点,可以用typedef啊
typedef函数指针
- 格式:typedef 返回类型 (*函数指针名)(参数)
-
typedef int(*p)(int a, int b)
这样就可以将p 作为一个类型来看待了
实现如下:
#include <iostream>
using namespace std;
typedef int(*Multi)(int a, int b);//这样写就可以将函数指针作为一个类型了
int mul(int x, int y)
{
return x*y;
}
void show(Multi a, int x, int y)//将函数指针作为参数,省了不少事
{
cout << "this is a Multi function, the result is " << a(x, y) << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
Multi a = mul;//如果没有加typedef,只能写成:Multi = mul
//以下三种方式一样
cout << mul(2, 4) << endl;
cout << a(2, 4) << endl;
cout << (*a)(2, 4) << endl;
//将函数指针作为参数
show(a, 2, 4);
return 0;
}
后几个类型,参考一个这个博客:c语言函数指针的理解与使用 写的很详细了