我正在学习函数指针并遇到以下代码:
#include <iostream>
using namespace std;
// A macro to define dummy functions:
#define DF(N) void N() { \
cout << "function " #N " called ... " << endl; }
DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g);
void (*func_table[])() = {a, b, c, d, e, f, g};
int main(){
while(1){
cout << "press a key from 'a' to 'g' "
"or q to quit"<< endl;
char c, cr;
cin.get(c); cin.get(cr); // second one for CR
if ( c == 'q')
break;
if (c < 'a' || c > 'g')
continue;
(*func_table[c-'a'])();
}
}
有人可以向我解释指向函数 func_table 的指针是如何工作的吗?特别是在里面有 a,b,c,d,e,f,g 的效果是{}
什么以及整个表达式在做什么?
通常,当我看到指向函数的指针时,您会通过分配函数名称来初始化指针,但在此示例中,它只是提供了一个字符数组。那么它是如何知道调用 DF(char) 的呢?
另外,我不确定为什么我需要这些陈述:
DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g);
此外,声明:(*func_table[c-'a'])();
我们减去“a”的原因是因为不同将确定从数组中选择的正确字母{a,b,c,d,e,f,g}
?