函数指针数组问题
#include <iostream>
using namespace std;
#define DF(N) void N(){cout < < "function "#N " called " < <endl;}
DF(a);DF(b);DF(c);DF(d);//这里的作用是什么呢?
void (*func_table[])()={a,b,c,d};//这里也不是很明白
int main()
{
while(1){
cout < < "press a key from 'a 'to 'd ' or q to quit " < <endl;
char c;
cin> > c;
if(c== 'q ')
break;
if(c < 'a '||c> 'd ')
continue;
(*func_table[c- 'a '])();
}
return 0 ;
}
望高人赐教,谢谢:)
[解决办法]
DF(a);DF(b);DF(c);DF(d);//申明并定义了a(),b(),c(),d()四个不带返回直不带参数的函数
可扩展成:
void a(){cout < < "function a called " < <endl;}
void b(){cout < < "function b called " < <endl;}
void c(){cout < < "function c called " < <endl;}
void d(){cout < < "function d called " < <endl;}
void (*func_table[])()={a,b,c,d};
扩展成
func_table[0] = a;
func_table[1] = b;
func_table[2] = c;
func_table[3] = d;
于是*func_table[c- 'a ']就掉用了a(),b(),c(),d()中的一个,因此,输出结果因该是
function a called
function b called
function c called
function d called
中的一个
[解决办法]
顶
[解决办法]
up
[解决办法]
#define DF(N) void N(){cout < < "function "#N " called " < <endl;} 声明并定义了a()、b()、c()、d()
N(a)就是调用函数;
void (*func_table[])()={a,b,c,d};等价于
func_table[0] = a;
func_table[1] = b;
func_table[2] = c;
func_table[3] = d;
[解决办法]
宏是文本替换,这样的话下面的DF(a);DF(b);DF(c);DF(d);就比较好理解了