网站首页 > 基础教程 正文
函数、指针、数组结合到一起就是函数指针数组。
首先它是一个数组,这个数组的元素是函数指针(指向函数的指针)。
如:
int(*fn[])(int,int);
一般的函数指针是这样定义的:
int(*fn)(int,int);
一般的指针函数是这样定义的:
int* fn (int,int);
表示一个函数,它的返回值是一个指针:int*。
运算符的优先级不仅体现在一般的表达式中,也体现在类似上面的声明表达式中。指针运算符*的优先级要低于函数运算符()。
所以对于int* fn (int,int);
它最终是一个函数,是一个返回指针的函数。
对于int(*fn)(int,int);
用括号来提升了优先级,它最终是一个指针,是一个指向函数的指针,称为函数指针。
对于int(*fn[])(int,int);
先要分析括号内的部分,*的优先级低于[],所以它最终是一个数组,是一个数组元素是指针的数组,其中的指针是函数指针,所以最终它是一个函数指针数组。
基本思路是从内核开始层层外推,层层加定语。也就是:数组→指针数组→函数指针数组:数组元素是函数指针,指针是指向函数的指针。
函数指针数组的初始化:
int(*fn[])(int,int)={add,minus,divide,multiple}; //add,minus,divide,multiple是函数名
以下是实例:
#include<iostream> using namespace std; int add(int a,int b){return a+b;} int minus(int a,int b){return a-b;} int divide(int a,int b){return a*b;} int multiple(int a,int b){return a/b;} int(*fn[])(int,int)={add,minus,divide,multiple}; int cal(int a, int b, int opp) { return fn[opp](a,b); } void main() { int a=5, b=3; cout<<cal(a,b,0)<<" "<<cal(a,b,1)<<" "<<cal(a,b,2)<<" "<<cal(a,b,3)<<" "<<endl; system("pause"); } //8 2 15 1
-End-
猜你喜欢
- 2024-10-10 C++系列1-1:初探C++ c=2μf
- 2024-10-10 浅谈C++11(第9篇 可变参数模板) c++可变参数模板类
- 2024-10-10 数组的初始化方式有哪几种? 数组的初始化是什么意思
- 2024-10-10 c++对于内建类型的默认初始化 创建内部类的对象
- 2024-10-10 C++类构造函数,如何初始化对象?linux C++第27讲
- 2024-10-10 【C++编程语言】之 类和对象——对象的初始和消除
- 2024-10-10 C++基础语法梳理:引用、封装、继承和多态
- 2024-10-10 C++核心准则?:按照成员声明的顺序定义和初始化成员变量
- 2024-10-10 C++核心准则C.47:按照成员变量声明的次序定义和初始化数据成员
- 2024-10-10 C/C++语言编程系列002——不同情况下数组的初始化方法
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)