找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

切身体会指向函数的指针

[复制链接]
admin 发表于 2012-9-2 22:17:58 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
今天在网上看到有人用指向函数的指针代替switch-case使用,自觉指针知识匮乏然后亲自试验了一下,不知道是不是我以前见识太少火星了,在此就当抛砖引玉,望大家指点一下指针方面其它的实用用法。

说明:我是在VC6下作实验的,用了C++的一些输入输出的东西,但不影响我想说明的问题,这实验就是键盘输入1屏幕输出1,键盘输入2则屏幕输出2。
先看一下用switch-case的例子:
#include<iostream>
using namespace std;
void out1(void);
void out2(void);
int main (void)
{
char ch;
while(cin >> ch)
{
switch(ch)
{
case '1':
out1();
break;
case '2':
out2();
break;
default:
break;
}
}
return 0;
}
void out1()
{
cout << "1" << endl;
}
void out2()
{
cout << "2" << endl;
}
当case有很多种情况的话 一个一个选择分支会变的很长,下面看一下用指向函数的指针的实现情况,这是一个不传入形参并且调用的函数没有返回值的情况
#include<iostream>
using namespace std;
void out1(void);
void out2(void);
int main (void)
{
char ch;
void (*p[2])(void)={out1, out2}; //指向函数的指针,这里定义了一个数组形式
while(cin >> ch)
{
p[ch-0x30-1]();
}
return 0;
}
void out1()
{
cout << "1" << endl;
}
void out2()
{
cout << "2" << endl;
}
下面再看一下传入形参并且调用的函数有返回值的情况
#include<iostream>
using namespace std;
int out1(int a);
int out2(int a);
int main (void)
{
char ch;
int (*p[2])(int a)={out1, out2}; //申明函数指针的时候对应要调用的函数申明了形参
while(cin >> ch)
{
p[ch-0x30-1](ch-0x30-1);
}
return 0;
}
int out1(int a)
{
cout << a << endl;
return 0;
}
int out2(int a)
{
cout << a << endl;
return 0;
}
这样子可以把很长的选择分支变成一句话,当然如果每个分支要调用的函数一样,则只要在申明的函数指针数组里面赋一样的函数就行了,使用方便。

这是我做的实验,以前没见到这么用过,觉得稀奇,不知道大家有没有用过,我有个问题:用switch-case的时候最后可以用default分支做出错处理,如果用这种情况的话是否只能在用函数指针调用的时候判断数组下标的范围,有没有什么好方法?
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-29 12:52 , Processed in 0.060033 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表