欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++/c 函数指针详解

程序员文章站 2024-03-26 10:14:29
...

1 函数指针

今天我们要介绍的是函数指针。内容由以下3部分组成:

① 函数指针的概念,为了面试时能够说出来。

② 函数指针的用法 当然是为工作用到喽

③ 函数指针的实例,用一些练习来加深印象。

④经典面试题:函数指针和指针函数的区别

好 开始!

①函数指针的概念:

1.1 函数指针: 是指向函数的指针变量
在程序运行中,函数是程序算法指令部分,他们和数组一样也占用内存空间,也都有相应的地址。我们程序员可以使用指针变量指向数组的首地址,同样,也可以使用指针变量指向函数代码的首地址, 指向函数代码首地址的指针变量,称为函数指针。

1.2 函数指针有两个用途:调用函数和做函数的参数。

② 函数指针的用法

2.1 用法:返回值类型 ( * 指针变量名) ([形参列表]);

注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:

//比较两个string对象的长度
bool lengthCompare(string ch1 , string ch2);

该函数的类型是bool ( string , string ) 。要想声明一个可以指向该函数的指针,只需要替换函数名字即可。

// pf 指向一个函数,该函数的参数是两个 string的引用,返回值是bool类型。
bool (*pf)(string ch1 , string ch2 );  //声明了一个函数指针

注2:函数括号中的形参可有可无,视情况而定。

③ 函数指针的实例

下面的简单例子说明函数指针调用的方法。

#include<stdio.h>
int max(int x,int y){return (x>y? x:y);}
int 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", a, b, c);
    return 0;
}

输入5 , 2 结果如下:c++/c 函数指针详解

此外 在上个例子中
ptr = max ; 也可以写成 ptr = & max ;
等价的赋值语句,取地址符是可选的。
此外,我们还能直接使用指向函数的指针来调用该函数,无需提前解引用指针。

int d1 = ptr( 1 , 2 );  //调用max函数
int d2 = (*ptr)( 1 , 2 );//一个等价的调用 
int d3 = max(1 , 2 );  //另一个等价的调用 

④函数指针和指针函数的区别
关键考点:
指针函数的概念;
指针函数的使用。

考题分析:
函数不仅可以返回整型,字符型等数据类型的数据,还可以返回指针类型的数据,使其指向某个地址单元,返回指针的函数称为指针函数,指针函数的定义示例代码如下.

int &test(x,y);

上面代码中 x ,y 是形式参数,test()是函数名,调用函数后会返回一个指向整型数据的地址指针。test(x,y) 是函数,他的值是指针。
使用代码如下:

#include<stdio.h>

char *ch(char *str1 ,char *str2)
{
    int i;
    char *p;
    p = str2;
    if(*str2 == NULL)
    {
        printf("cuocuocuo");
    }
    do
    {
        *str2 = *str1;
        str1++;
        str2++;
    }while (*str1!=NULL);
    return p;
}
int main()
{
    char *ch(char *, char *); //调用函数
    char str1[] = "HELLO";
    char str2[] = "123456789";
    printf("%s",ch(str1,str2));//打印结果

}

结果输出 ” HELLO6789”
上面代码,函数char *ch()表示的就是一个返回字符型指针的函数。

答案:函数指针是一个指向函数的指针。他的本质是一个指针,而指针函数只是说明他是一个返回值为指针的函数,它本质是一个函数,