精华内容
下载资源
问答
  • 指向函数的指针

    2014-06-06 09:12:53
    和变量一样,函数也有指针。指向函数的指针叫做

    和变量一样,函数也有指针。指向函数的指针叫做函数指针。

    函数指针指向特定的函数类型,函数类型由返回值类型和函数形参决定,与具体的函数名无关。

    int (*p)(int a, int b);
    p就是指向一个返回值为int类型,形参为两个int类型的函数。上面(*p)两边的括号必须有,否则就成了函数的声明了。

    这样定义函数指针比较费解,实际中常常用typedef简化定义。例如

    typedef int (*PF)(int , int);
    就是定义了一个返回值为int类型,形参为两个int类型的函数指针PF。

    函数指针只能赋值为0或者同类型函数。
    函数指针的最大用途便是用于回调函数。回调函数是通过函数指针调用函数,把函数指针作为参数传递给另一个函数,在这个函数中使用指针类调用函数。

    举个例子:

    #include<iostream>
    using namespace std;
    
    typedef int (*PF)(int , int);
    
    int Add(int a, int b)
    {
    	return a+b;
    }
    int Sub(int a, int b)
    {
    	return a-b;
    }
    int main()
    {
    	PF p;//定义函数指针
    	char c;
    	int a;
    	int b;
    	cin>>c>>a>>b;
    	switch(c)
    	{
    	case '+':
    		p=Add;
    		break;
    	case '-':
    		p=Sub;
    		break;
    	default:
    		cout<<"输入错误"<<endl;
    		return 0;
    	}
    	cout<<"The result is:"<<p(a,b)<<endl;
    }


    展开全文
  • 指向函数的指针 指向函数的指针的数组

    1、指向函数的指针


    对于一个函数只能做两件事情:调用它,或是取得它的地址。
    可以取得函数的地址并赋值给指向函数的指针,并在以后使用这个指针调用该函数。

    void fun(int num)
    {
    	cout << num << endl;
    }
    
    void (*pfun)(int num);//pfun此时就是一个函数指针
    
    int main()
    {
    	int value = 100;
    	
    	pfun = &fun;//获得函数fun的地址
    	pfun(value);//等价于调用 fun(value);
    	
    	//取地址运算符&可以不要;
    	pfun = fun;
    	pfun(value);//也是等价于调用 fun(value);
    
    	return 0;
    }

    指向函数的指针的声明中也需要给出参数类型和返回值类型。指向函数的指针只能被参数类型和返回值类型都一样的函数赋值。

    比如:
    void (*pfun)(string);
    void f1(string){}
    int f2(string) {}
    void f3(int){}
    pfun = f1;//正确
    pfun = f2;//不正确,返回值类型不同
    pfun = f3;//不正确,参数类型不同


    2、指向函数的指针的数组

    typedef void (*PF)();
    PF edit_opts[] = {&f1, &f2, &f3};//edit_opts就是指向函数指针的数组,数组里面每个元素的类型都是void (*PF)();
    展开全文
  • 写一个函数,它的参数为指向函数的指针,返回类型也为指向函数的指针
     一个函数,它以指向字符的指针和对整数的引用为参数,不返回值;一个指向这个函数的指针;一个以这种指针为参数的函数;以及一个

    返回这种指针的函数。写出一个函数的定义,它以一个这样的指针作为参数,并返回其参数作为返回值。提示:使用typedef。


    /*************************************************************************
    	> File Name: practice_1.cpp
    	> Author: 
    	> Mail: 
    	> Created Time: 2016年03月15日 星期二 22时35分36秒
     ************************************************************************/
    
    #include <iostream>
    using namespace std;
    
    //以指向字符的指针和对整数的引用为参数,不返回值
    void fun1(char *ch, int & rval);//形参ch, rval可以没有
    
    //指向上面函数fun1的函数指针
    typedef void (*pfun1)(char* ch, int & rval);
    pfun1 pf = fun1;//pf就是指向上面函数fun1的指针
    
    //一个以pfun1指针为参数的函数
    void fun2(pfun1);//形参可以没有
    
    //一个返回pfun1类型指针的函数 
    pfun1 fun3();
    
    //一个函数,以fun1类型的指针作为参数,以fun1类型的指针作为返回值
    pfun1 fun4(pfun1 pf)
    {
        return pf;
    }
    
    
    int main()
    {
        char* str = "cplusplus";
        int val = 100;
    
        cout << "调用fun1(str,val):";
        fun1(str, val);
    
        pfun1 pf1 = fun1;
        cout << "调用pf1(str, val): ";
        pf1(str, val);
    
        pfun1 pf2 = fun4(pf1);
        cout << "调用pf(str, val): ";
        pf(str, val);
        
    
        return 0;
    }
    
    void fun1(char* ch, int & rval)
    {
    
        cout << "ch = " << ch << ", rval++ = " << rval++ << endl;
    }
    

    运行结果:

    调用fun1(str,val):ch = cplusplus, rval++ = 100
    调用pf1(str, val): ch = cplusplus, rval++ = 101
    调用pf(str, val): ch = cplusplus, rval++ = 102

    展开全文
  • 指向函数的指针 ------ 函数指针(function pointer)

    万次阅读 多人点赞 2017-11-21 13:23:17
    函数的调用可以通过函数名,也可以通过指向函数的指针来调用。 定义形式:  类型 (*指针变量名)(参数列表); 例如:  int (*p)(int i,int j);  p是一个指针,它指向一个函数,该函数有2个整形参数,返回类型...

          函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码。一个函数的地址是该函数的进入点,也是调用函数的地址。函数的调用可以通过函数名,也可以通过指向函数的指针来调用。函数指针还允许将函数作为变元传递给其他函数。

          不带括号和变量列表的函数名,这可以表示函数的地址,正如不带下标的数组名可以表示数组的首地址。

    定义形式:

            类型 (*指针变量名)(参数列表);

    例如:

            int (*p)(int i,int j);

        p是一个指针,它指向一个函数,该函数有2个整形参数,返回类型为int。p首先和*结合,表明p是一个指针。然后再与()结合,表明它指向的是一个函数。指向函数的指针也称为函数指针。

            例1:

    #include <stdio.h>
    
    #define  GET_MAX 	0
    #define  GET_MIN 	1
    
    int get_max(int i,int j)
    {
    	return i>j?i:j;
    }
    
    int get_min(int i,int j)
    {
    	return i>j?j:i;
    }
    
    int compare(int i,int j,int flag)
    {
    	int ret;
    
    	//这里定义了一个函数指针,就可以根据传入的flag,灵活地决定其是指向求大数或求小数的函数
    	//便于方便灵活地调用各类函数
    	int (*p)(int,int);
    
    	if(flag == GET_MAX)
    		p = get_max;
    	else
    		p = get_min;
    
    	ret = p(i,j);
    
    	return ret;
    }
    
    int main()
    {
    	int i = 5,j = 10,ret;
    
    	ret = compare(i,j,GET_MAX);
    	printf("The MAX is %d\n",ret);
    
    	ret = compare(i,j,GET_MIN);
    	printf("The MIN is %d\n",ret);
    
    	return 0 ;
    }


            例2:

    #include <stdio.h>
    #include <string.h>
    
    void check(char *a,char *b,int (*cmp)(const char *,const char *));
    
    main()
    {
        char s1[80],s2[80];
        int (*p)(const char *,const char *);
    
    	//将库函数strcmp的地址赋值给函数指针p
        p=strcmp;
    
        printf("Enter two strings.\n");
        gets(s1);
        gets(s2);
    
        check(s1,s2,p);
    }
    
    void check(char *a,char *b,int (*cmp)(const char *,const char *))
    {
        printf("Testing for equality.\n");
    	//表达式(*cmp)(a,b)调用strcmp,由cmp指向库函数strcmp(),由a和b作调用strcmp()的参数。
    	//调用时,与声明的情况类似,必须在*cmp周围使用一对括号,使编译程序正确操作,
    	//同时这也是一种良好的编码风格,指示函数是通过指针调用的,而不是函数名。
        if((*cmp)(a,b)==0)
            printf("Equal\n");
        else
            printf("Not Equal\n");
    }
    

            例3:

    #include <stdio.h>
    #include <ctype.h>
    #include <stdlib.h>
    #include <string.h>
    
    //check()函数的第3个函数是函数指针,就可以根据具体情况传入不同的处理函数
    void check(char *a,char *b,int (*cmp)(const char *,const char *));
    
    //自定义的比较两个字符串的函数
    int compvalues(const char *a,const char *b);
    
    main()
    {
        char s1[80],s2[80];
    
        printf("Enter two values or two strings.\n");
        gets(s1);
        gets(s2);
    
    	//如果是数字,则用函数指针传入数字比较函数进行处理
        if(isdigit(*s1)){
            printf("Testing values for equality.\n");
            check(s1,s2,compvalues);
        }
    	//如果是字符串,则用函数指针传入库函数strcmp进行处理
        else{
            printf("Testing strings for equality.\n");
            check(s1,s2,strcmp);
        }
    }
    
    void check(char *a,char *b,int (*cmp)(const char *,const char *))
    {
        if((*cmp)(a,b)==0)
            printf("Equal.\n");
        else
            printf("Not Equal.\n");
    }
    
    int compvalues(const char *a,const char *b)
    {
        if(atoi(a)==atoi(b))
            return 0;
        else
            return 1;
    }
    

    注意:

            int *f(int i, int j);

            int (*p)(int i, int j);

        前者是返回值是指针的函数;后者是一个指向函数的指针。

    展开全文
  • C语言之指向函数的指针

    千次阅读 2018-04-20 19:17:19
    本文将简要介绍指向函数的指针. 如何声明一个指向函数的指针? void print(int num); // 声明函数 void (*funptr)(int) = print; // 声明指向函数的指针, 该函数接受一个int参数, 返回void, 并用print函数的...
  • 代码跟小甲鱼老师讲课时基本一样** 函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个...函数的调用可以通过函数名,也可以通过指向函数的指针来调用。*函数指针还允许将函数作为变元传递给其他...
  • 指向函数的指针变量的用途之一就是可以把该函数的入口地址作为参数传递到其它函数(传递给形参)。 原理举例: 有一个函数名为fun的函数,它有两个形参x1和x2,并且定义x1和x2为指向函数的指针变量。在调用fun函数...
  • 指针函数与指向函数的指针变量

    千次阅读 2016-03-07 14:03:34
    指针变量也可以指向一个函数。...1. 指向函数的指针变量的一般定义形式为:  函数类型 (*变量名)(函数形参表)  2. #include  3. using namespace std;  4. int main()  5. {  int ma
  • 指向函数的指针 (一) 用函数指针变量调用函数  可以用指针变量指向整形变量、字符串、数组、结构体、也可以指向一个函数。一个函数在编译时被分配一个入口地址。这个入口地址就称为函数指针。可以用一个指针...
  • C++指向函数的指针

    千次阅读 2018-03-25 22:14:52
    指针,学习C和C++的人都十分了解,但是很多人都十分惧怕指针,没关系,今天我们学习指向函数的指针。举例说明#include&lt;iostream&gt; #include&lt;string&gt; using namespace std; bool ...
  • 指向函数的指针作函数参数

    千次阅读 2018-05-04 19:51:58
    函数指针是一种指向函数的指针,可以用来调用相关的函数。当函数指针不是作为参数的时候,必须要进行初始化给他赋值,例如int (*p)(int,int); *p=max或者p=max都是可以的,调用函数时直接写(*p)(a,b)或p(a,b)...
  • 字面看就可以看出二者的区别,指向函数的指针即指针指向的地址为某个函数,而返回指针的函数为某个函数返回值是指针。 下面具体说: 1、指向函数的指针 bool (*ptr)(int a); 解析:声明指针ptr,指向的函数带有一个...
  • C语言中指向函数的指针

    千次阅读 2017-10-02 10:34:54
    转帖自: ... ...程序在编译后,每个函数都有一个首地址(也就是函数第一条指令的地址),...可以定义指向函数的指针变量,使用指针变量间接调用函数。下面通过一个简单的例子来说明: float max(float x,float y)
  • 1、指向函数的指针 定然形式为: 数据类型 (*指针变量... 定义P是一个指向函数的指针变量,此函数带回整型的返回值。若写成 int *p(); 它就声明了一个函数,函数的返回值是指向整型变量的指针。在i
  •  今天看书看到指向函数的指针,顿时又陷入自我混沌状态,这是本着逃避心理的混沌!但是总是要慢慢明白的,所以就根据网络上看到的和书上读到的,在此尽我所能得总结下,以便后续学习回过头来回忆...  ...
  • 指向函数的指针数组

    千次阅读 2012-08-22 15:21:31
    c里面的指针很重要,但学了c这么久了,都不知道指向函数的指针数组有什么用,其实和用函数指针差不多。 我们可以创建一个有趣的结构式指向函数的指针数组。为了选择一个函数,只需要使用数组的下标,然后间接引用这...
  • 初学c语言中的返回指针的函数和指向函数的指针时,往往容易分不清楚,下面我就来梳理一下: 一、返回指针的函数 也叫指针函数。 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于...
  • C++中返回指向函数的指针

    千次阅读 2013-07-31 10:27:13
    C++中返回指向函数的指针  在C++中,函数的形参可以是指向函数的指针,函数也可以返回函数的指针。  例如:  int (*ff(int)) (int *,int);表示:ff(int)是一个函数,带有一个int型的形参,该函数返回int ...
  • 请教各位大侠,在c现代方法里一道这样的题小弟不是很清楚,int(*f(float(*)(long),char*))(double)里的(*)是代表什么?指向函数的指针?没有函数名?烦请各位大侠指教,谢谢!
  • 指向函数的指针变量

    千次阅读 2018-08-14 11:16:23
    1. 说明: 函数在编译时会被分配给一个入口地址, 而指针...1) 定义指向函数的指向变量, 并不意味其能指向任何函数, 而是只能指向定义时指向的类型函数 . 2) 若需要用指针调用函数, 必须先使用指针变量指向该函数...
  • 指向函数的指针比较大小

    千次阅读 2015-09-29 14:49:03
    指向函数的指针比较大小 #include min(int a,int b) { if(a) return a; else return b; } void main() { int (*pim)();//(*p)()表示定义一个指向函数的指针变量,它用来存放函数的入口地址 int a,b,m; ...
  • 正如文章题目所言,一个是函数的指针返回值,一个是指向函数的指针,在这里 int *p( int a,int b)函数的返回值指向一个整型变量。  要弄明白两者的区别,首先得知道运算符()和*的优先级,由于运算符()的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,971
精华内容 17,588
关键字:

指向函数的指针