C语言基础:C语言指针(7) - 指向函数的指针

前几节, 我们讲了指针对于数组, 字符串, 还有一些补充的知识, 现在我们来讲指针的最后一个应用, 那就是函数指针.


下面我们来看一个小例子:

#include <stdio.h>
char *test();

int main()
{
    char *name = test();
    
    printf("name=%s\n", name);
    
    return 0;
}

char *test()
{
    return "rose";
}



这个例子的函数, 其实是返回char类型的函数指针, 然后在main函数里接收并且打印, 也就是相当于:

char *name = "rose";

PS:但是类型一定要能够兼容.


下面我们再来看另一个小例子:

#include <stdio.h>

void test();

int main()
{
    // (*p)是固定的写法
    // 左边的void: 指针变量p指向的函数没有类型
    // 右边的(): 指针变量p指向的函数没有形参
    void (*p)();
    
    // 指针变量p指向了函数test
    p = test;
    
    // 有三种调用的方法
    p();
    //(*p)(); 利用指针间接调用函数
    //test(); 直接调用函数
    
    return 0;
}


void test()
{
    printf("我调用了test函数\n");
}

有些人会感到疑惑, 为什么函数也能用指针调用呢?

答案其实很简单, 因为内存, 只要在程序里有地址的变量, 或者函数, 什么都可以, 只要你有地址, 指针就能指向该XXXX, 这样子解释应该不难理解, 所以在这个程序里, 是可以调用的.


再来一个完整的小例子:

#include <stdio.h>

int test2(int a, int b)
{
    int sum = a + b;
    printf("sum = %d\n", sum);
    
    return sum;
}

int main()
{
    int (*p)(int, int);
    
    p = test2;
    
    p(10, 20);
    
    return 0;
}

看完这个小例子之后, 大家对函数的指针应该更加的深刻认识了, 好了, 指针这一章就到这里结束了, 过后我会继续添加更多的C语言基础知识~~谢谢~~

posted @ 2015-01-08 11:23  背着吉他去流浪  阅读(187)  评论(0编辑  收藏  举报