C++ code:函数指针数组
函数指针作为一种数据类型,当然可以作为数组的元素类型。例如,要实现用菜单来驱动函数调用的程序框架,则用函数指针数组来实现就比较容易维护。
#include<iostream>
using namespace std; typedef void(*MenuFun)();
void f1(){ cout << "good!\n"; }
void f2(){ cout << "better!\n"; }
void f3(){ cout << "best!\n"; } int main()
{
MenuFun fun[] = {f1,f2,f3};
for (int choice = ; choice;)
{
cout << "1-----display good\n"
<< "2-----display better\n"
<< "3-----display best\n"
<< "0-----display exit\n"
<< "Enter your choice:";
cin >> choice;
switch (choice)
{
case :fun[](); break;
case :fun[](); break;
case :fun[](); break;
case :return ;
default:cout << "you entered a wrong key.\n";
}
}
}

程序第4行首先定义了一个函数指针类型MenuFun。若前面无typedef,则后面部分就是一个函数指针定义,所以,正因为有了typedef,MenuFun就是函数指针的类型名,可以以此创建函数指针,但其本身并不是函数指针。
在第11行,根据MenuFun创建了一个函数指针数组fun,并予以初始化。初始化的值每个都是同类型的函数名,它们在第5、6、7行定义,接下来就是循环处理键盘输入,每当输入值为1,或2或3时,显示good、better、best等字样。同一功能的程序,也可以用向量来实现,当然从眼前的小结构程序来看,其方便性并不明显,以下是改用向量来实现的代码:
#include<iostream>
#include<vector>
using namespace std; typedef void(*MenuFun)();
void f1(){ cout << "good!\n"; }
void f2(){ cout << "better!\n"; }
void f3(){ cout << "best!\n"; } int main()
{
vector<MenuFun> fun();
fun[] = f1, fun[] = f2, fun[] = f3;
for (int choice = ; choice;)
{
cout << "1-----display good\n"
<< "2-----display better\n"
<< "3-----display best\n"
<< "0-----display exit\n"
<< "Enter your choice:";
cin >> choice;
if (choice > && choice < ) fun[choice - ]();
else if (choice == ) return ;
else cout << "you entered a wrong key.\n";
}
}

C++ code:函数指针数组的更多相关文章
- C++基础——函数指针 函数指针数组
==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...
- typedef 函数指针 数组 std::function
1.整型指针 typedef int* PINT;或typedef int *PINT; 2.结构体 typedef struct { double data;}DATA, *PDATA; //D ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
#include<stdio.h> #include<stdlib.h> #include<windows.h> /* 举列子说明什么是函数指针 */ //以一个加 ...
- C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子
先来不带参数的回调函数例子 #include <iostream> #include <windows.h> void printFunc() { std::cout<& ...
- C 函数指针数组
名字有点绕口,其实更应该翻译为指针函数数组. 记录下对Head-First C这一节的理解,几乎每天班车上都会咪两眼,几乎每次都是看不懂,敲一敲的时候才有些明白. 通俗点讲,这功能解决的是,具有同种签 ...
- C语言的函数指针数组(好绕啊~看完这篇估计就通关了)
转自https://www.cnblogs.com/chr-wonder/p/5168858.html int *(*p(int))[3] 今天有人问这个是啥?我一看直接就懵逼了…… 下面做一些简单的 ...
- c语言.函数指针数组
函数指针: 一个指向函数的指针.一般用函数名表示. 函数指针数组:元素为函数指针的数组.转移表.c语言中函数不可以定义为数组,只能通过定义函数指针来操作. #include<stdio.h> ...
- 转:函数指针数组的妙用(I)
转自:http://blog.sina.com.cn/s/blog_4c78b35f010008hi.html 笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* ...
随机推荐
- 使用博客系统发生_STORAGE_WRITE_ERROR_错误
因为本人有自己的vps正好又最近学习了网络的搭建,但是呢不是一番风顺的在假设好PHP.http和MySQL后吧一个博客系统放进去后出现了以下问题 好吧== 出来了这个问题到是让我看了半天,然后查了查说 ...
- SQL Server利用XML找字符串相同部分
DECLARE @a NVARCHAR(100)= '01,02,04,05,07'; DECLARE @b NVARCHAR(100)= '01,03,04,05,06'; WITH a1 ...
- Arcgis api 离线部署
Arcgis api 离线部署 修改 文件一(init.js)位置:arcgis_js_v317_api\arcgis_js_api\library\3.17\3.17\init.js 将[HOSTN ...
- Spring_bean的实例化时机
前言:创建Java对象 public class User { private String name; private Integer age; public User() { System.out ...
- Linux操作系统原理
Linux操作系统原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.计算机经历的四个时代 1.第一代: 真空管计算机,输入和输出:穿孔卡片,对计算机操作起来非常不便,做一件事 ...
- Linux_安装
总结: 分区-->格式化-->起一个设备文件名(逻辑分区一定从5开始)-->指定挂载点(必须是空的目录名称作为盘幅)
- 海明码 CRC冗余校验码
海明码(也叫汉明码)具有一位纠错能力.本文以1010110这个二进制数为例解释海明码的编码和校验方法 确定校验码的位数x 设数据有n位,校验码有x位.则校验码一共有2x种取值方式.其中需要一种取值方式 ...
- 夏令时(DST)测试
夏令时测试是比较小众的测试,主要针对在有夏令时的国家使用的软件,如果你接触到了这方面的测试,说明你在挣国外的钱:). 话不多说,先来介绍下什么是夏令时: 夏时制,夏时令(Daylight Sa ...
- 实现一个string类
实现要实现:构造,析构,拷贝构造,赋值的功能 1. 提供构造函数 string(), string(const string & str),string(const char * str), ...
- 定时器QTimer
import sys from PyQt5.QtCore import QTimer, Qt from PyQt5.QtWidgets import QApplication, QWidget, QP ...