精华内容
下载资源
问答
  • 函数指针和指针函数用法和区别

    万次阅读 多人点赞 2018-05-24 08:11:10
    函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,...

    前言

    函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言的童鞋,估计碰到这些东西就已经要崩溃了,然后好不容易死记硬背下来应付考试或者面试,然后过了几天发现,又是根本不会用,也不知道该在哪些地方用,这就尴尬了。
    今天这里只讲两个相对简单的,其实上面说那些太复杂的东西也真的很少用,即便是用了理解起来很麻烦,所以莫不如先深刻理解这两个比较容易的,并且项目中比较常用到。

    正文

    先来看看两者的定义以及说明。

    指针函数

    定义

    指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。
    声明格式为:*类型标识符 函数名(参数表)

    这似乎并不难理解,再进一步描述一下。
    看看下面这个函数声明:

    int fun(int x,int y);
    

    这种函数应该都很熟悉,其实就是一个函数,然后返回值是一个 int 类型,是一个数值。
    接着看下面这个函数声明:

    int *fun(int x,int y);
    

    这和上面那个函数唯一的区别就是在函数名前面多了一个*号,而这个函数就是一个指针函数。其返回值是一个 int 类型的指针,是一个地址。

    这样描述应该很容易理解了,所谓的指针函数也没什么特别的,和普通函数对比不过就是其返回了一个指针(即地址值)而已。

    指针函数的写法

    int *fun(int x,int y);
    int * fun(int x,int y);
    int* fun(int x,int y);
    

    这个写法看个人习惯,其实如果*靠近返回值类型的话可能更容易理解其定义。

    示例

    (由于本人习惯于 Qt 中进行开发,所以这里为了方便,示例是在 Qt 工程中写的,其语法是一样的,只是输出方式不同)
    来看一个非常简单的示例:

    typedef struct _Data{
        int a;
        int b;
    }Data;
    
    //指针函数
    Data* f(int a,int b){
        Data * data = new Data;
        data->a = a;
        data->b = b;
        return data;
    }
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        //调用指针函数
        Data * myData = f(4,5);
        qDebug() << "f(4,5) = " << myData->a << myData->b;
    
        return a.exec();
    }
    
    

    输出如下:

    f(4,5) =  4 5
    

    注意:在调用指针函数时,需要一个同类型的指针来接收其函数的返回值。
    不过也可以将其返回值定义为 void*类型,在调用的时候强制转换返回值为自己想要的类型,如下:

    //指针函数
    void* f(int a,int b){
        Data * data = new Data;
        data->a = a;
        data->b = b;
        return data;
    }
    
    调用:
    Data * myData = static_cast<Data*>(f(4,5));
    

    其输出结果是一样的,不过不建议这么使用,因为强制转换可能会带来风险。

    函数指针

    定义

    函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。
    声明格式:类型说明符 (*函数名) (参数)
    如下:

    int (*fun)(int x,int y);
    

    函数指针是需要把一个函数的地址赋值给它,有两种写法:

    fun = &Function;
    fun = Function;
    

    取地址运算符&不是必需的,因为一个函数标识符就表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。

    调用函数指针的方式也有两种:

    x = (*fun)();
    x = fun();
    

    两种方式均可,其中第二种看上去和普通的函数调用没啥区别,如果可以的话,建议使用第一种,因为可以清楚的指明这是通过指针的方式来调用函数。当然,也要看个人习惯,如果理解其定义,随便怎么用都行啦。

    示例

    int add(int x,int y){
        return x+y;
    }
    int sub(int x,int y){
        return x-y;
    }
    //函数指针
    int (*fun)(int x,int y);
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        //第一种写法
        fun = add;
        qDebug() << "(*fun)(1,2) = " << (*fun)(1,2) ;
    	//第二种写法
        fun = &sub;
        qDebug() << "(*fun)(5,3) = " << (*fun)(5,3)  << fun(5,3);
    
        return a.exec();
    }
    
    

    输出如下:

    (*fun)(1,2) =  3
    (*fun)(5,2) =  2 2
    

    上面说到的几种赋值和调用方式我都分别使用了,其输出结果是一样的。

    二者区别

    通过以上的介绍,应该都能清楚的理解其二者的定义。那么简单的总结下二者的区别:

    定义不同

    指针函数本质是一个函数,其返回值为指针。
    函数指针本质是一个指针,其指向一个函数。

    写法不同

    指针函数:int* fun(int x,int y);
    函数指针:int (*fun)(int x,int y);
    可以简单粗暴的理解为,指针函数的*是属于数据类型的,而函数指针的星号是属于函数名的。
    再简单一点,可以这样辨别两者:函数名带括号的就是函数指针,否则就是指针函数。

    用法不同

    上面已经写了详细示例,这里就不在啰嗦了。

    总而言之,这两个东西很容易搞混淆,一定要深入理解其两者定义和区别,避免犯错。

    另外,本文都是针对普通函数指针进行介绍,如果是C++非静态成员函数指针,其用法会有一些区别,在另外一篇博客中单独介绍,文章在这里

    展开全文
  • 指针函数和函数指针有什么区别 1,这两个概念都是简称,指针函数是指带指针的函数,即本质是一个函数。我们知道函数都又返回类型...返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指

    指针函数和函数指针有什么区别

    1,这两个概念都是简称,指针函数是带指针的函数,即本质是一个函数。我们知道函数都又返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示:

    返回类型标识符 *函数名称(形式参数列表)
    { 函数体 }

    返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。例如下面一个返回指针函数的例子:

    #include"stdio.h"

    //float *find();
    float * find(float (*pointer)[4],int n)//定义指针函数
    {
     float *pt;
     pt=*(pointer+n);
     return(pt);
    }

    void main(void)
    {
     static float score[][4]={
      {60,70,80,90},
      {56,89,34,45},
      {34,23,56,45}};
     float *p;
     int i,m;
     printf("Enter the number to be found:");
     scanf("%d",&m);
     printf("the score of 第%d行 are:/n",m);
     p = find(score,m);
     for(i=0;i<4;i++)
      printf("%5.2f/t",*(p+i));
    }

    学生学号从0号算起,函数find()被定义为指针函数,起形参pointer是指针指向包含4个元素的一维数组的指针变量。pointer+1指向score的第一行。*(pointer+1)指向第一行的第0个元素。pt是一个指针变量,它指向浮点型变量。main()函数中调用find()函数,将score数组的首地址传给pointer.

    2,“函数指针”是指向函数的指针变量,因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。

    函数指针的说明方法为:
    数据类型标志符 (*指针变量名)(参数); 注:函数括号中的参数可有可无,视情况而定。

    下面的程序说明了函数指针调用函数的方法:

    #include"stdio.h"

    int max(int x,int y)
    {
     return(x>y?x:y);
    }

    void main()
    {
     int (*ptr)(int,int);
     int a,b,c;
     ptr=max;
     scanf("%d%d",&a,&b);
     c=ptr(a,b);
     printf("a=%d,b=%d,max=%d/n",a,b,c);
    }

    ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你像怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数,不过注意,指向函数的指针变量没有++和--运算,用时要小心。

    展开全文
  • 当C语言中子函数的返回值是一个指针(地址)时,我们将这个子函数称为指针函数 #include <stdio.h> #include <string.h> //这个子函数的*strlong是返回了return的首地址对应的数组。 //因为子函数...

    当C语言中子函数的返回值是一个指针(地址)时,我们将这个子函数称为指针函数

    #include <stdio.h>
    #include <string.h>
    
    //这个子函数的*strlong是返回了return的首地址对应的数组。
    //因为子函数返回的是一个指针,所以子函数名称需要定义为指针格式char *strlong
    char *strlong(char *str1, char *str2){
        if(strlen(str1) >= strlen(str2)){
            return str1;//返回str1的首地址
        }else{
            return str2;//返回str2的首地址
        }
    }
    int main(){
        char str1[]="dasg", str2[]="sgfarshtr", *str;
        gets(str1);
        gets(str2);
    	str = strlong(str1, str2);
    	
    	//因为是数组,所以str=strlong(str1, str2)最后得到的也是一个首地址,
    	//所以str在定义时需要定义为一个指针
    	
    	printf("%s\n",str1);//数组打印只需要传入首地址,所以如果在str前加上*,则无法打印
        printf("Longer string: %s\n", str);
    	printf("Longer string: %s\n", strlong(str1, str2));
        return 0;
    }
    

    结果为:
    dasg
    Longer string: sgfarshtr
    Longer string: sgfarshtr

    注意!!!:

    用指针作为函数返回值时需要注意的一点是,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针请尽量不要指向这些数据,C语言没有任何机制来保证这些数据会一直有效,它们在后续使用过程中可能会引发运行时错误。
    参考资料:http://c.biancheng.net/view/2015.html

    展开全文
  • 指针函数和函数指针

    万次阅读 多人点赞 2019-03-30 16:21:36
    指针函数和函数指针是C语言里两个比较绕的概念。但是不仅面试题爱考,实际应用中也比较广泛。很多人因为搞不清这两个概念,干脆就避而远之,我刚接触C语言的时候对这两个概念也比较模糊,特别是当指针函数、函数指针...

    概述

    指针函数和函数指针是C语言里两个比较绕的概念。但是不仅面试题爱考,实际应用中也比较广泛。很多人因为搞不清这两个概念,干脆就避而远之,我刚接触C语言的时候对这两个概念也比较模糊,特别是当指针函数、函数指针、函数指针变量、函数指针数组放在一块的时候,能把强迫症的人活活逼疯。
    其实如果理解了这些概念的本质,是不需要死记硬背的,理解起来也比较容易。

    指针函数

    指针函数: 顾名思义,它的本质是一个函数,不过它的返回值是一个指针。其声明的形式如下所示:

    ret *func(args, ...);
    

    其中,func是一个函数,args是形参列表,ret *作为一个整体,是 func函数的返回值,是一个指针的形式。
    下面举一个具体的实例来做说明:

    文件:pointer_func.c

    # include <stdio.h>
    # include <stdlib.h>
    
    int * func_sum(int n)
    {
        if (n < 0)
        {
            printf("error:n must be > 0\n");
            exit(-1);
        }
        static int sum = 0;
        int *p = &sum;
        for (int i = 0; i < n; i++)
        {
            sum += i;
        }
        return p;
    }
    
    int main(void)
    {
        int num = 0;
        printf("please input one number:");
        scanf("%d", &num);
        int *p = func_sum(num); 
        printf("sum:%d\n", *p);
        return 0;
    }
    

    上例就是一个指针函数的例子,其中,int * func_sum(int n)就是一个指针函数, 其功能十分简单,是根据传入的参数n,来计算从0到n的所有自然数的和,其结果通过指针的形式返回给调用方。
    以上代码的运行结果如下所示:
    运行结果1
    如果上述代码使用普通的局部变量来实现,也是可以的,如下所示:

    文件:pointer_func2.c

    # include <stdio.h>
    # include <stdlib.h>
    
    int func_sum2(int n)
    {   
        if (n < 0)
        {   
            printf("error:n must be > 0\n");
            exit(-1);
        }
        int sum = 0;
        int i = 0;
        for (i = 0; i < n; i++)
        {   
            sum += i;
        }
        return sum;
    }
    
    int main(void)
    {
        int num = 0;
        printf("please input one number:");
        scanf("%d", &num);
        int ret = func_sum2(num);
        printf("sum2:%d\n", ret);
        return 0;
    }
    

    本案例中,func_sum2函数的功能与指针函数所实现的功能完全一样。
    在这里插入图片描述
    不过在使用指针函数时,需要注意一点,相信细心地读者已经发现了,对比func_sumfunc_sum2函数,除了返回值不一样之外,还有一个不同的地方在于,在func_sum中,变量sum使用的是静态局部变量,而func_sum2函数中,变量sum使用的则是普通的变量。
    如果我们把指针函数的sum定义为普通的局部变量,会是什么结果呢?不妨来试验一下:

    文件:pointer_func3.c

    # include <stdio.h>
    # include <stdlib.h>
    
    int * func_sum(int n)
    {
        if (n < 0)
        {
            printf("error:n must be > 0\n");
            exit(-1);
        }
        int sum = 0;
        int *p = &sum;
        for (int i = 0; i < n; i++)
        {
            sum += i;
        }
        return p;
    }
    
    int main(void)
    {
        int num = 0;
        printf("please input one number:");
        scanf("%d", &num);
        int *p = func_sum(num); 
        printf("sum:%d\n", *p);
        return 0;
    }
    

    执行以上程序,发现仍然能得到正确的结果:
    在这里插入图片描述
    可是如果我们把main函数里面稍微改动一下:

    int main(void)
    {
        int num = 0;
        printf("please input one number:");
        scanf("%d", &num);
        int *p = func_sum(num);
        printf("wait for a while...\n");    //此处加一句打印
        printf("sum:%d\n", *p);
        return 0;
    }
    

    我们在输出sum之前打印一句话,这时看到得到的结果完全不是我们预先想象的样子,得到的并不是我们想要的答案。
    在这里插入图片描述
    为什么会出现上面的结果呢?
    其实原因在于,一般的局部变量是存放于栈区的,当函数结束,栈区的变量就会释放掉,如果我们在函数内部定义一个变量,在使用一个指针去指向这个变量,当函数调用结束时,这个变量的空间就已经被释放,这时就算返回了该地址的指针,也不一定会得到正确的值。上面的示例中,在返回该指针后,立即访问,的确是得到了正确的结果,但这只是十分巧合的情况,如果我们等待一会儿再去访问该地址,很有可能该地址已经被其他的变量所占用,这时候得到的就不是我们想要的结果。甚至更严重的是,如果因此访问到了不可访问的内容,很有可能造成段错误等程序崩溃的情况。
    因此,在使用指针函数的时候,一定要避免出现返回局部变量指针的情况。
    那么为什么用了static就可以避免这个问题呢?
    原因是一旦使用了static去修饰变量,那么该变量就变成了静态变量。而静态变量是存放在数据段的,它的生命周期存在于整个程序运行期间,只要程序没有结束,该变量就会一直存在,所以该指针就能一直访问到该变量。
    因此,还有一种解决方案是使用全局变量,因为全局变量也是放在数据段的,但是并不推荐使用全局变量。

    函数指针

    与指针函数不同,函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针。
    我们知道,函数的定义是存在于代码段,因此,每个函数在代码段中,也有着自己的入口地址,函数指针就是指向代码段中函数入口地址的指针。
    其声明形式如下所示:

    ret (*p)(args, ...);
    

    其中,ret为返回值,*p作为一个整体,代表的是指向该函数的指针,args为形参列表。其中p被称为函数指针变量

    关于函数指针的初始化

    与数组类似,在数组中,数组名即代表着该数组的首地址,函数也是一样,函数名即是该数组的入口地址,因此,函数名就是该函数的函数指针。
    因此,我们可以采用如下的初始化方式:

    函数指针变量 =  函数名;
    

    下面还是以一个简单的例子来具体说明一下函数指针的应用:

    文件:func_pointer.c

    #include <stdio.h>
    
    int max(int a, int b)
    {
        return a > b ? a : b;
    }
    
    int main(void)
    {
        int (*p)(int, int); //函数指针的定义
        //int (*p)();       //函数指针的另一种定义方式,不过不建议使用
        //int (*p)(int a, int b);   //也可以使用这种方式定义函数指针
        
        p = max;    //函数指针初始化
    
        int ret = p(10, 15);    //函数指针的调用
        //int ret = (*max)(10,15);
        //int ret = (*p)(10,15);
        //以上两种写法与第一种写法是等价的,不过建议使用第一种方式
        printf("max = %d \n", ret);
        return 0;
    }
    

    上面这个函数的功能也十分简单,就是求两个数中较大的一个数。值得注意的是通过函数指针调用的方式。
    首先代码里提供了3种函数指针定义的方式,这三种方式都是正确的,比较推荐第一种和第三种定义方式。然后对函数指针进行初始化,前面已经提到过了,直接将函数名赋值给函数指针变量名即可。
    上述代码运行的结果如下:
    在这里插入图片描述
    调用的时候,既可以直接使用函数指针调用,也可以通过函数指针所指向的值去调用。(*p)所代表的就是函数指针所指向的值,也就是函数本身,这样调用自然不会有问题。有兴趣的同学可以去试一试。

    为什么要使用函数指针?

    那么,有不少人就觉得,本来很简单的函数调用,搞那么复杂干什么?其实在这样比较简单的代码实现中不容易看出来,当项目比较大,代码变得复杂了以后,函数指针就体现出了其优越性。
    举个例子,如果我们要实现数组的排序,我们知道,常用的数组排序方法有很多种,比如快排,插入排序,冒泡排序,选择排序等,如果不管内部实现,你会发现,除了函数名不一样之外,返回值,包括函数入参都是相同的,这时候如果要调用不同的排序方法,就可以使用指针函数来实现,我们只需要修改函数指针初始化的地方,而不需要去修改每个调用的地方(特别是当调用特别频繁的时候)。

    回调函数

    函数指针的一个非常典型的应用就是回调函数
    什么是回调函数?
    回调函数就是一个通过指针函数调用的函数。其将函数指针作为一个参数,传递给另一个函数。
    回调函数并不是由实现方直接调用,而是在特定的事件或条件发生时由另外一方来调用的。
    同样我们来看一个回调函数的例子:

    文件:callback.c

    #include<stdio.h>
    #include<stdlib.h>
    
    //函数功能:实现累加求和
    int func_sum(int n)
    {
            int sum = 0;
            if (n < 0)
            {
                    printf("n must be > 0\n");
                    exit(-1);
            }
            for (int i = 0; i < n; i++)
            {
                    sum += i;
            }
            return sum;
    }
    
    //这个函数是回调函数,其中第二个参数为一个函数指针,通过该函数指针来调用求和函数,并把结果返回给主调函数
    int callback(int n, int (*p)(int))
    {
            return p(n);
    }
    
    int main(void)
    {
            int n = 0;
            printf("please input number:");
            scanf("%d", &n);
            printf("the sum from 0 to %d is %d\n", n, callback(n, func_sum));       //此处直接调用回调函数,而不是直接调用func_sum函数
            return 0;
    }
    

    上面这个简单的demo就是一个比较典型的回调函数的例子。在这个程序中,回调函数callback无需关心func_sum是怎么实现的,只需要去调用即可。
    这样的好处就是,如果以后对求和函数有优化,比如新写了个func_sum2函数的实现,我们只需要在调用回调函数的地方将函数指针指向func_sum2即可,而无需去修改callback函数内部。
    以上代码的输出结果如下:
    在这里插入图片描述
    回调函数广泛用于开发场景中,比如信号函数、线程函数等,都使用到了回调函数的知识。

    展开全文
  • 详解C语言指针函数、函数指针、函数指针数组

    万次阅读 多人点赞 2018-07-09 11:08:24
    在C语言中,指针是一个很重要但是又很容易弄错的概念,也可以说指针就是C语言的灵魂,所以说学好指针对于完全掌握C语言是...指针函数就是返回指针值的函数,本质是一个函数。所以指针函数等价于“返回值为指针的函数...
  • 返回指针函数

    万次阅读 2013-05-20 17:45:22
    返回指针函数 每个函数可返回一个值,返回值可以是char、int、float、double等类型,当将返回值类型设置为void时,表示函数没有返回值。在C语言中,还允许一个函数的返回值是一个指针(即地址),这种返回指针...
  • 顾名思义,指针函数返回指针的函数。其一般定义形式如下: 类型名*函数名(函数参数表列); 其中,后缀运算符括号"()"表示这是一个函数,其前缀运算符星号"*"表示此函数为指针型函数,其函数值为指针,即它带回来...
  • C++函数指针、指针函数、返回值为函数指针的函数浅谈 引言 函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。 而返回值为函数指针的指针函数就更难理解了,放在文章的...
  • c++返回函数指针函数

    千次阅读 2021-07-17 20:43:05
    返回函数指针的函数函数指针指针函数返回函数指针的函数 函数指针 类似于数组名,在C语言中函数名的实际就是函数所在空间的首地址,故也可声明相应类型的函数指针用于指向相应的实际函数,更深层次甚至可以声明...
  • 一、返回指针函数  指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的。 返回指针函数的一般形式为:类型名 * 函数名(参数列表)  比如下面这个函数,返回一个指向char类型变量的...
  • 指针函数与函数指针

    千次阅读 多人点赞 2018-04-16 23:26:12
    1)指针函数指的是一个函数返回值为指针类型的函数,本质就是个函数。 2)函数指针指的是指向函数的指针变量,本质是一个指针变量。 2.声明和定义 1)指针函数声明 类型关键字 *函数名(参数列表) 例: int *...
  • C语言指针函数和函数指针区别

    千次阅读 多人点赞 2019-02-28 15:24:46
    指针函数和函数指针经常会混淆,一个是返回指针的函数,另一个是指向函数的指针,下面就分别解释指针函数和函数指针的区别。 一、指针函数 指针函数返回指针的函数 主体是函数,返回值是一个指针 基本声明形式:...
  • 函数返回指针|函数返回地址

    千次阅读 2015-05-12 13:34:43
    函数返回局部自动变量的地址是严重的错误。 但是我们可以返回动态分配的内存的地址,因为使用操作符new分配的动态内存一直存在, 直到被delete销毁或者程序结束,不受函数作用域的影响。 #include using namespace ...
  • 返回函数指针函数

    千次阅读 2015-01-06 11:08:38
     顾名思义,指针函数返回指针的函数。其一般定义形式如下:  类型名 *函数名(函数参数表列);  其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为...
  • 使用返回指针函数查找最大值

    千次阅读 2014-12-06 22:01:13
    使用返回指针函数查找最大值
  • 函数指针,指针函数,返回值为指针的函数

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

    千次阅读 多人点赞 2019-03-06 17:38:43
    顾名思义,指针函数返回指针的函数。其一般定义形式如下: 类型名 *函数名(函数参数表列); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带...
  • 【C++札记】指针函数与函数指针

    千次阅读 2017-11-22 10:41:48
    指针函数是一个函数,只不过指针函数返回的类型是某一类型的指针。 格式: 类型名*函数名(函数参数列表) 如下代码存在问题 void test(char *p) { p = (char*)malloc(10); return; } int main() { char* ...
  • 因为函数的类型由它的返回类型和形参类型共同决定,与函数名无关,所以想要声明一个函数指针,只需要用指针替换函数名即可,例如:比较字符串长度的函数:bool LengthCompare(const string &amp;, const string ...
  • 函数指针和指针函数

    千次阅读 2018-09-25 22:14:37
    函数指针是指向函数指针变量,所以函数指针首先是指针变量,只不过他指向的是函数; C/CPP在编译时,默认分配给函数一个入口,该入口即是函数指针所要指向的地址,可以用为两个用途: 调用函数函数的参数 ...
  • C++_函数返回指针

    千次阅读 2018-07-22 10:40:59
    C++ 允许从函数返回指针。为了做到这点,必须声明一个返回指针函数,如下所示: int * myFunction() { static int c[10]; ... return c; } C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 ...
  • Linux内核 指针函数和函数指针

    千次阅读 2014-03-29 22:34:00
    首先,要区分函数指针和指针函数。函数指针和指针函数从语文的角度看,应该算是一个偏正短语,函数指针说明是一个指针,而指针函数说明是一个函数;其是什么样的指针、什么样的函数,我们先暂且不论。明确函数指针是...
  • 大话 函数指针 和 指针函数

    千次阅读 热门讨论 2015-01-07 09:19:47
    (1)指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针,即我们常见的函数类型,且返回值是指针。 (2)函数指针是指向函数的指针变量,即本质是一个指针变量,是一个指向函数(可能是...
  • C语言--返回指针值的函数

    千次阅读 2018-05-15 21:56:15
    我们知道,一个函数可以带回一个整型值、字符值、实型值等,函数还可以带回一个指针型的...这个适当的指针其类型应为函数返回指针所指向的类型。 这样的函数比较难于理解,其实只要把它当做一般的函数来处理就容易...
  • 指针函数 函数指针

    千次阅读 2007-10-31 23:23:00
    指针函数 函数指针2007-05-16 11:04 一、指针函数 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。 格式: 类型说明符 * 函数名(参数) 当然了,由
  • 定义返回函数指针函数

    千次阅读 2017-12-31 22:32:21
    1. 基础知识:  1) 定义函数指针: return_type (*func_pointer)(parameter_list) ...2) 定义返回函数指针函数: return_type(*function(func_parameter_list))(parameter_list) 定义了一个函数
  • c语言之函数指针及指针函数

    千次阅读 2018-11-14 17:41:04
    用最少的字来阐述函数指针与指针函数之间的本质区别及用法。使用过程中,万变不离其宗,只会在返回的类型,参数类型上做文章,本质不便。 概念: 指针函数本质是一个函数,只是函数的返回值是一个指针。 函数指针...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 814,627
精华内容 325,850
关键字:

返回指针的函数