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语言基础知识~~谢谢~~