热门搜索 :
考研考公
您的当前位置:首页正文

函数指针 指针 函数

来源:东饰资讯网

指针和函数的各种结合,看到都头疼,以前也看过这方面的,可是不久又忘了,好记性不如赖笔头,做一下整理。
先让自己懵逼一下(类型随意吧)

  • 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;
}
Top