首页 > 代码库 > 函数指针的用法
函数指针的用法
函数指针试吃由于函数地址的指针。针织能够指向函数对于C/C++来说很重要也很有用,这为我们编译时未确定的顺序呢执行函数提供了另一种选择,而不需要使用条件语句。
1.声明函数指针
void (*foo)(); int (*f1)(double);//传入double,返回int void (*f2)(char*);//传入char*指针,没有返回值 double* (*f3)(int,int);//返回double指针
如果去掉第一对括号就成了返回 void* 的函数了!
下面的例子就是返回指针的函数:
int *f4();
2.使用函数指针
直接给个例子吧!
int (*fptr1)(int); int square(int num){ return num * num; } int n = 5; fptr1 = square; printf("%d square is %d\n",n, fptr1(n)); //显示 5 square is 25
也可以这样赋值 fptr1 = □
但是没有必要那样做,因为编译器会忽略取地址符。因为函数名本来就是一个地址。
为函数指针声明一个类型定义会比较方便。通常类型定义的名字是声明的最后一个元素。
typedef int (*funcptr)(int); ..... funcptr fptr2; fptr2 = square;
3.传递函数指针
int add(int num1,int num2){ return num1 + 怒骂; } int sub(int num1,int num2){ return num1 - num2; } typedef int (*fptrOperator)(int,int); int compute(fptrOperator operator, int num1, int num2){ return operator(num1,num2); } //调用 compute(add,5,6); compute(sub,5,6);
4.返回函数指针
fptrOperator select(char opcode){ switch(opcode){ case '+': return add; case '-': return sub; } }
int evaluate(char opcode,int num1,num2){ fptrOperator operation = select(opcode); return operation(num1,num2); } //调用 evaluate('+',5,6); evaluate('-',5,6);
5.使用函数指针数组
函数指针数组可以基于某些条件选择要执行的函数。
typedef int (*operation)(int,int); operation operations[128] = {NULL}; void initializeOperationsArray(){ operations['+'] = add; operations['-'] = sub; }
int evaluateArray(char opcode,int num1,int num2){ fptrOperation operation; operation = operations[opcode]; return operation(num1,num2); } //调用 initilizeOperationArray(); evaluateArray('+',5,6);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。