精华内容
下载资源
问答
  • 通常我们所说的函数指针指的是指向一般普通函数的指针。和其他指针一样,函数指针指向某种特定类型,所有被同一指针运用的函数必须具有相同的形参类型和返回类型。 int (*pf)(int, int); // 声明函数指针 这里,pf...
  • 函数指针是指向函数的指针,指针函数是一个函数的返回值是一个指针。以下就是对函数指针与指针函数的应用进行了详细的分析介绍,需要的朋友可以参考下
  • 指针函数与函数指针

    千次阅读 多人点赞 2018-04-16 23:26:12
    2)函数指针指的是指向函数的指针变量,本质是一个指针变量。 2.声明和定义 1)指针函数声明 类型关键字 *函数名(参数列表) 例: int *fun(int a,int b); 2)函数指针声明 类型关键字 (*函数名)...

    1.含义
    1)指针函数指的是一个函数返回值为指针类型的函数,本质就是个函数。
    2)函数指针指的是指向函数的指针变量,本质是一个指针变量。


    2.声明和定义
    1)指针函数声明
    类型关键字 *函数名(参数列表)
    例:
    int *fun(int a,int b);


    2)函数指针声明
    类型关键字 (*函数名)(参数列表)
    例:
    int (*fun)(int a,int b);
    注意:函数指针在使用时与普通指针一样,需要初始化指向有效地址才能使用,函数指针则指向函数实体的地址,即是函数名称。
    对于函数指针,也可以结合“typedef”关键字使用,这样即可自定义一类新的的函数指针类型,可以用该类型声明和定义同一类的函数指针。
    typedef 类型关键字(函数名 *)(函数列表)
    例:
    typedef int (*fun)(int a,int b);
    此时“fun”作为自定义的函数指针,可用来声明或者定义同一类型的函数指针,如“fun max;” 、“fun min;’”。


    3.使用
    1)指针函数使用
    指针函数的使用和一般函数的使用相同,只是返回值是一个指针值,即地址。对于指针函数的返回值,需要注意如下几点。
    a.不能返回从栈上分配的内存地址,如局部变量,因为函数结束时,即释放栈内存,此时返回栈上内存地址,相当于野指针。
    b.可以返回静态变量(static)、全局变量的地址、从堆上手动分配(malloc/new)的内存地址、通过指针形参所获得的实参的有效地址。
    c.返回从堆上手动分配的内存时,注意及时释放(free/delete),否则导致内存泄漏,一般不建议使用这种方式,降低程序的可读性和可靠性。
    例:
    返回static 变量地址

    int *fun(void)
    {
        static int a;
    
        return &a;
    }

    返回全局变量地址

    int a;
    
    int *fun(void)
    {
        return &a;
    }

    返回从堆上分配的地址(慎用!)

    int *fun(void)
    {
        int *a = mallocsizeofint));
    
        return a; //返回该地址后,需手动释放该指针指向的内存。
    }

    返回通过指针形参所获得的实参的有效地址

    int *funint *buff)
    {
        return buff;
    }



    2)函数指针使用
    在使用函数指针前,必须对函数指针进行初始化指向函数实体。
    实例:通过函数指针比较两个数的大小。
    a.声明函数指针

    int*fun)(int a,int b);



    b.定义函数实体
    在定义函数实体时,必须保证类型与函数指针一致,包括返回值,参数类型、个数等。

    int maxint a,int b)
    {
        if(a == b)
            return 0;
        return(a > b ? a :b); //比较两个整型数大小,并返回较大值
    }
    int minint a,int b)
    {
        if(a == b)
            return 0;
        return(a < b ? a :b); //比较两个整型数大小,并返回较小值
    }



    c.赋值
    如果需返回两数中较大的值,则初始化指针指向max函数即:
    fun = max;或者fun = &max;
    否则指向min函数:
    fun = min;或者fun = &min;
    注意:指针在指向变量时,必须使用取值符号“&”获取变量地址,而对于函数,则不是必须的,因为函数名称则表示该函数的地址。


    d.使用
    调用时有两种方式:
    a)函数指针名称(参数列表);即fun(a,b);
    b)(*函数指针名称)(参数列表);即(*fun)(a,b);
    对于第二种方式比较直观理解,表明是通过函数指针调用改函数的。

    int x;
    
    fun = max;
    x = (*fun)(45);//x值为5 或者 x = fun45fun = min;
    x = (*fun)(45);//x值为4 或者 x = fun45

    函数指针的使用场景
      函数指针的常见用法就是把函数指针作为参数传递给函数。一个函数通过由运行时决定的指针来调用另一个函数的行为叫做回调(callback)。用户将一个函数指针作为参数传递给其它函数,后者将“回调”用户的函数。这样就可实现通过同一接口实现不同的执行效果(类似C++中的多态性)。
      另外在驱动函数分层,通用函数接口等,也常见使用函数指针的方式。

    展开全文
  • 函数指针函数指针类型

    千次阅读 2018-09-29 08:48:59
    函数指针 1. 定义 每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。 注意:函数指针的本质是一个指针变量,且指针指向的函数的入口地址 2. 语法 指向函数的指针变量...

    参考:https://blog.csdn.net/candyliuxj/article/details/6339414

    函数指针

    1.     定义

    每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。

    注意:函数指针的本质是一个指针变量,且指针指向的函数的入口地址

    2.     语法

    指向函数的指针变量的一般定义形式为:

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

    3.     说明

    • 函数指针定义形式中的数据类型是指函数的返回值的类型。
    • 区分下面两个语句:
    int (*p)(int a, int b);  //p是一个指向函数的指针变量,函数返回类型为整型
    int *p(int a, int b);     //p是函数名,函数返回类型为整型指针
    • 函数指针指向的变量不是固定的某一个函数的,只是定义了一个变量专门用来存放函数的入口地址的;在程序中把哪一个函数的地址赋给它,它就指向哪一个函数。
    • 在给函数指针变量赋值时,只需给出函数名,而不必给出参数。
    int max(int x, int y)     {    return x+y;    }
    
    void main()
    {
        //定义一个函数指针
        int (*p)(int a, int b);
        p = max;    //正确
        p = &max;    //正确
    
        //通过函数指针定义变量
        p(1,2);    //正确    
        (*p)(1,2);    //同样正确
    }

     

    • 在一个程序中,指针变量p可以先后指向不同的函数,但一个函数不能赋给一个不一致的函数指针(即不能让一个函数指针指向与其类型不一致的函数)。
    int fn1(int x, int y); 
    int fn2(int x);
    
    //定义如下的函数指针:
    int (*p1)(int a, int b); int (*p2)(int a);
    
    p1 = fn1; //正确
    p2 = fn2; //正确
    p1 = fn2; //产生编译错误
    • 函数指针只能指向函数的入口处,而不可能指向函数中间的某一条指令。不能用*(p+1)来表示函数的下一条指令。
    • 函数指针变量常用的用途之一是把指针作为参数传递到其他函数。

    4.     举例

    源代码:

    #include <iostream>
    #include <conio.h>
    using namespace std; 
    
    int max(int x, int y); //求最大数
    int min(int x, int y); //求最小数
    int add(int x, int y); //求和
    void process(int i, int j, int (*p)(int a, int b)); //应用函数指针
     
    int main()
    {
    	int x, y;
    	cin>>x>>y;
     
    	cout<<"Max is: ";
    	process(x, y, max);
     
    	cout<<"Min is: ";
    	process(x, y, min);
     
    	cout<<"Add is: ";
    	process(x, y, add);
     
    	getch();
    	return 0;
    }
     
    int max(int x, int y)
    {
    	return x > y ? x : y;
    }
     
    int min(int x, int y)
    {
    	return x > y ? y : x;
    }
     
    int add(int x, int y)
    {
    	return x + y;
    }
     
    void process(int i, int j, int (*p)(int a, int b))
    {
    	cout<<p(i, j)<<endl;
    }
    

    函数指针类型

    通过typedef定义函数指针类型

    int max(int x, int y)
    {
    	return x > y ? x : y;
    }
    //定义函数指针类型
    typedef int(*pFun)(int, int)
    
    int main()
    {
        //通过函数指针类型定义函数指针
        pFun fun = &max;
        fun(1,2);
        return 0;
    }
     

     

    展开全文
  • 我用一个指针(int *p)指向一个变量(int a[10]);当a的生命周期结束时,a的空间是否会被释放掉。...假如有指针函数,尽管指向的对象(函数内部对象)生命周期已经结束,为什么指针指向的区域没有被释放掉?
  • 函数指针 指针函数

    千次阅读 2013-01-22 08:29:03
    函数指针 在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。 我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。 然后通过指针变量就...
    函数指针
    在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。
    我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。
    然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。
    函数指针变量定义的一般形式为:
    类型说明符  (*指针变量名)();
    其中“类型说明符”表示被指函数的返回值的类型。
    “(* 指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。
    例如:
        int (*pf)();
    表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。
    指针函数
    在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
    定义指针型函数的一般形式为:
        类型说明符 *函数名(形参表)  
        {  
            ……          /*函数体*/
        }  
    其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。
    如:
        int *ap(int x,int y)
        {
          ......       /*函数体*/
    }
    表示ap是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。

    展开全文
  • 函数指针

    函数指针的定义

    若在程序中定义了一个函数,在程序编译的时候,编译系统会给这段函数代码分配一段内存空间,这段内存空间的起始地址称为这个函数的指针(函数名实质就是函数这段代码的起始地址)。

    定义和使用指向函数的指针变量

    定义指向函数的指针变量的一般形式:

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

    这里的“类型名”是指函数返回值的类型;
    由于优先级的关系“ * 指针变量名”要用圆括号括起来,若不括起来则变成 “类型名 *指针变量(函数参数表列)”,这样则定义了一个函数,该函数返回一个类型指针变量。

    形式举例:
    int(*p)(int,int);
    定义p是一个指向函数的指针变量,它指向含有两个int型参数的函数,并且返回一个int型的值。

    函数举例:

     /* 
      * 模拟一个计算器,加减乘除
      * 返回值是int类型 
      */
    #include<stdio.h>
    
    /*函数声明*/
    int add(int a,int b);
    int sub(int a,int b);
    int mul(int a,int b);
    int div(int a,int b);
    
    int (*p)(int,int);//声明函数指针,指向返回值类型为int,有两个参数类型都是int的函数  
    
    int main(void)
    { 
        int a=0,b=0;
        int result=0;
        char c='0';
        printf("输入两个整数;\n");
        scanf("%d %d",&a,&b);
        printf("请输入要进行的运算:+ - * /\n");
        do
        {   
           scanf("%c",&c);
        }while(c=='\n');
        switch(c)
        {
            case '+':
                p=add;break;
            case '-':
                p=sub;break;
            case '*':
                p=mul;break;
            case '/':
                p=div;break;
            default:
                p=NULL;break;
        }
    
        result=(*p)(a,b);
        printf("%d %c %d = %d\n",a,c,b,result);
        return 0;
    
    }
        int add(int a,int b)
        {
            return a+b;
        }
    
        int sub(int a,int b)
        {
            return a-b;
        }
    
        int mul(int a,int b)
        {
            return a*b;
        }
    
        int div(int a,int b)
        {
            return a/b;
        }
    

    运行结果如下图所示:
    这里写图片描述

    有时候,我们可以用到typedef,因为有时候自定义类型太长,使用typedef给自定义类型重新命名一个简短的名字。
    举例:

        #include<stdio.h> 
    
        int max(int a, int b); 
        int min(int a, int b);
    
        typedef int (*f)(int, int); // 声明函数指针,指向返回值类型为int,有两个参数类型都是int的函数  
    
        int main(void)  
        {  
            int c=0; 
            int d=0; 
            f P1=NULL;
            f P2=NULL;
    
            P1=max; // 函数指针P1指向求最大值的函数max  
            c=(*P1)(1, 2);      
            printf("The max value is %d \n", c);  
    
            P2=min; // 函数指针P2指向求最小值的函数min  
            d=(*P2)(1, 2);      
            printf("The min value is %d \n", d); 
    
            return 0;  
        }  
    
        int max(int a, int b) 
        {  
            return a > b ? a : b;  
        }  
    
        int min(int a, int b)
        {  
            return a < b ? a : b;  
        }  

    运行结果如下图所示:
    这里写图片描述
    参考资料:
    1.朱友鹏,张先凤.嵌入式linux与物联网软件开发.北京:人民邮电出版社,2017.
    2.谭浩强.C程序设计(第四版).北京:清华大学出版社,2010.
    3.http://www.cnblogs.com/uniqueliu/archive/2011/07/27/2118619.html
    4.http://blog.csdn.net/ameyume/article/details/8220832

    展开全文
  • 函数指针,指针函数,返回值为指针的函数

    万次阅读 多人点赞 2017-06-08 21:23:17
    在学习C语言时,一个比较容易混淆的概念就是函数指针、指针函数、返回值为指针的函数。本文将对这三个概念进行区分。指针函数就是返回值为指针的函数,两个本质上是同一事物,只是叫法不同。函数指针就是一个指向...
  • 函数指针

    千次阅读 2014-11-02 15:23:32
    定义 函数指针指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型(特定的函数类型)。函数类型由其返回类型以及形参表确定,而与函数名无关。如下声明了一个函数指针: bool (*pFunc)...
  • 指针函数指针函数,即本质是一个函数函数返回类型是某一类型的指针。类型标识符 *函数名(参数表) int *f(x,y); 这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,即指针函数一定...
  • 函数指针函数指针数组,函数指针数组的指针

    千次阅读 多人点赞 2017-11-27 11:39:51
    数组指针 概念:数组指针指针,只要是指针他就占4个字节; 例如: 整形指针:int *p;能够指向整形数据的指针  浮点型指针:float *p;能够指向浮点型的数据的指针 那么数组指针,同样的理解就是指向数组的指针...
  • 大话 函数指针 和 指针函数

    千次阅读 热门讨论 2015-01-07 09:19:47
    (2)函数指针是指向函数的指针变量,即本质是一个指针变量,是一个指向函数(可能是代码区)的首地址的指针,正如我们都知道,数组名就是指向数组第一个元素的常量指针(详见《数组拾遗》)。同理,对于一个函数而...
  • 函数指针(function pointer)是通过指向函数的指针间接调用函数。相信很多人对指向一般函数的函数指针使用...通常我们所说的函数指针指的是指向一般普通函数的指针。和其他指针一样,函数指针指向某种特定类型,所有被
  • 函数指针(指向函数的指针) 与数据项类似,函数也有自己的地址。函数的地址是存储其机器代码的内存的开始地址。例如,可以编写将另一个函数的地址作为参数的函数,这样第一个函数将能够找到第二个函数,并运行它。...
  • 文章目录函数指针(function pointer)普通函数指针成员函数指针(重点) 函数指针(function pointer) 与普通的指针一样,函数指针也是指针,但是不同的是函数指针指向的...通常我们所说的 函数指针 的是指向...
  • 函数指针函数指针数组及其应用

    万次阅读 多人点赞 2016-09-25 11:07:42
    1. 函数指针 先来看一个简单的例子。 int a=3; void *p=&a; 这是一个基础的不能再基础的例子。相信学过指针的都能看得懂。P是一个指针,指向a。a 是一个整形变量。 函数指针和其类似,只不过其指向的不是一个变量,...
  • 其中,后缀运算符括号"()"表示这是一个函数,其前缀运算符星号"*"表示此函数指针函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个"指向返回值为…的指针(地址),"类型名"表示...
  • 指针函数一般是返回指针的函数;...函数指针是表示指向函数开始地址的指针: 首先要了解函数的调用过程: #include <stdio> int fun(int i) { return i + 1; } int main(int argc, char **argv) { int r;
  • 就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来申明函数指针变量。 我先给你一个自定义数据类型的例子。 typedef int* PINT; //为int* 类型定义了一个PINT的别名 int main() {  ...
  • C++中的指针、数组指针与指针数组、函数指针与指针函数 本文从初学者的角度,深入浅出地详解什么是指针、如何使用指针、如何定义指针、如何定义数组指针和函数指针,并给出对应的实例演示;接着,区别了数组...
  • 函数指针】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的...
  • 就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来申明函数指针变量。 我先给你一个自定义数据类型的例子。 typedef int* PINT; //为int* 类型定义了一个PINT的别名 int main
  • C语言,指针函数与函数指针的区别

    千次阅读 2018-04-14 15:00:25
    以下内容转载自百度百科:=======================函数指针:函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样...
  • 指针函数和函数指针的区别

    千次阅读 2018-08-26 16:48:07
    指针函数与函数指针的区别 一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是带指针的函数,即本质是一个...
  • 函数指针的使用先看如下例子:#include #include char * fun(char * p1,char * p2){int i = 0;i = strcmp(p1,p2);if (0 == i){return p1;}else{return p2;}}intmain(){char * (*pf)(char * p1,char * p2);pf = &fun;...
  • 函数指针和指针函数

    千次阅读 2014-03-05 20:48:46
    函数指针】  在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址...
  • 易语言简单类函数指针源码,简单类函数指针,创建线程,取类函数指针,类函数,娃哈哈,CreateThread,SetWindowTextA
  • 函数指针和指针函数的区别?

    千次阅读 2018-07-10 21:34:24
    指针函数是带指针的函数,本质上是一个函数,函数返回类型是某一类型的指针,其形式一般如下所示:类型标识符 *函数名(参数列表)函数指针是指向函数的指针变量,本质上是一个指针变量,表示的是一个指针,它指向...
  • C++函数指针学习

    千次阅读 2019-03-30 16:09:58
    C++函数指针学习 博客搬家,原地址:https://langzi989.github.io/2017/09/08/C++函数指针学习/ 使用函数指针的优点 使用函数指针有助于我们设计出更优秀,更简洁更高效的程序。在下面的情景中我们常用到函数指针: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 391,672
精华内容 156,668
关键字:

函数指针是指