C语言函数指针的用法

在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。
我们如果定义一个指针,让这个指针指向一个函数名,那么该指针就是函数指针。
简单的说函数指针就是指向函数的指针。
在这里我们要和指针函数加以区别。
指针函数指的是函数返回值类型是指针的函数。
下面就通过一个简单的例子来认识一下函数指针:

#include <stdio.h>
void print()
{
    printf("hello world!\n");
}
int main(int argc, char **argv)
{
    void (*p)();
    p = print;
    p();

    return 0;
}

这个例子的打印值是:hello world!
那么它是怎么实现的呢?
从这个例子可以看到,我们首先定义了一个函数指针p ,这个函数指针的返回值为void型,然后我们给函数指针赋值,赋值为print,也就是print函数的首地址,此时p获得了print的地址,p的地址等于print的地址,所以最终调用p();也就相当于调用了print();

这是对函数指针最简单的应用,下面我们来看一个稍微复杂一点的例子(其实很简单)。

#include <stdio.h>
typedef int (*Function)(int);
int f1(int x)
{
    return x+1;
}
int f2(int x)
{
    return -x;
}
int f3(int n,Function f)
{
    int i,sum = 0;
    for(i = 1;i <= n;i++)
        sum += i * f(i);
    return sum;
}

int main(int argc, char **argv)
{
    printf("sum1 = %d\n",f3(5,f1));
    printf("sum2 = %d\n",f3(5,f2));


    return 0;
}

这个例子和上一个例子相比只是多了一个对函数指针的重定义,其实基本上没有区别。
打印值:
sum1 = 70
sum2 = -55

猜你喜欢

转载自blog.csdn.net/tjy199610_10/article/details/79856079