1.先从一个简单的求和求积函数开始
#include <stdio.h> int add(int a , int b) { return a + b; } int mul(int a , int b) { return a * b; } int main() { int a_count = add(5,7); int m_count = mul(5,7); printf("a_count is %d\n",a_count); printf("m_count is %d\n",m_count); return 0; }
输出:
a_count is 12
m_count is 35
Program ended with exit code: 0
2.试一下函数指针
#include <stdio.h> int add(int a , int b) { return a + b; } int mul(int a , int b) { return a * b; } int main() { int (*p_add)(int,int);//声明函数指针 p_add = add; int (*p_mul)(int,int); p_mul = mul; int a_count = p_add(5,7); int m_count = p_mul(5,7); printf("a_count is %d\n",a_count); printf("m_count is %d\n",m_count); return 0; }
结果不变
a_count is 12
m_count is 35
Program ended with exit code: 0
3.简化一下函数指针的定义
#include <stdio.h> int add(int a , int b) { return a + b; } int mul(int a , int b) { return a * b; } int main() { typedef int (*fun)(int,int);//定义类型fun是一个指向函数的指针 fun p_add = add; fun p_mul = mul; int a_count = p_add(5,7); int m_count = p_mul(5,7); printf("a_count is %d\n",a_count); printf("m_count is %d\n",m_count); return 0; }
结果不变
a_count is 12
m_count is 35
Program ended with exit code: 0
4.尝试使用一下函数指针数组
#include <stdio.h> int add(int a , int b) { return a + b; } int mul(int a , int b) { return a * b; } int main() { int (*func[])(int,int) = {add,mul};//定义函数指针数组 int a_count = func[0](5,7); int m_count = func[1](5,7); printf("a_count is %d\n",a_count); printf("m_count is %d\n",m_count); return 0; }
结果不变
a_count is 12
m_count is 35
Program ended with exit code: 0
5.改善函数指针数组
毕竟,函数多了之后,谁能记住乘法是在数组里第几个,下标该是多少。
#include <stdio.h> int add(int a , int b) { return a + b; } int mul(int a , int b) { return a * b; } int main() { int (*func[])(int,int) = {add,mul};//定义函数指针数组 enum func_tpye{ ADD , MUL }; //顺序与上面保持一致 int a_count = func[ADD](5,7); int m_count = func[MUL](5,7); printf("a_count is %d\n",a_count); printf("m_count is %d\n",m_count); return 0; }
结果不变
a_count is 12
m_count is 35
Program ended with exit code: 0
6.在函数中调不同的函数
之前的例子,直接用函数会更好用一些
#include <stdio.h> typedef int (*fun)(int,int); int add(int a , int b) { return a + b; } int mul(int a , int b) { return a * b; } int add_mul(fun f,int a,int b) { return f(a,b); } int main() { int (*func[])(int,int) = {add,mul};//定义函数指针数组 enum func_tpye{ ADD , MUL }; //顺序与上面保持一致 printf("a_count is %d\n",add_mul(func[ADD], 5, 7)); printf("m_count is %d\n",add_mul(func[MUL], 5, 7)); return 0; }
结果不变
a_count is 12
m_count is 35
Program ended with exit code: 0
7.上面那个例子还可以再扩展的更强大一些
比如说把两个数相乘相加改为多个数相乘相加
#include <stdio.h> #include <stdarg.h> typedef int (*fun)(int,int); int add(int a , int b) { return a + b; } int mul(int a , int b) { return a * b; } int add_mul(fun f,int n,...) { va_list ap; va_start(ap,n); int count = va_arg(ap, int); for (int i = 0; i<(n-1); ++i) { count = f(count,va_arg(ap, int)); } return count; } int main() { int (*func[])(int,int) = {add,mul};//定义函数指针数组 enum func_tpye{ ADD , MUL }; //顺序与上面保持一致 printf("a_count is %d\n",add_mul(func[ADD], 5,1,2,3,4,5)); printf("a_count is %d\n",add_mul(func[ADD], 3,7,3,6)); printf("m_count is %d\n",add_mul(func[MUL], 5,1,2,3,4,5)); printf("m_count is %d\n",add_mul(func[MUL], 3,7,3,6)); return 0; }
第一个参数为功能函数,第二个参数为运算的个数,之后是不定参数。
结果为:
a_count is 15
a_count is 16
m_count is 120
m_count is 126
Program ended with exit code: 0
时间: 2024-10-11 03:44:38