IceAge的键盘程序的前2条如下: 1、 void keyboard() { (*functions[state])();} 2、 FUNTION_POINTER functions[] = { state0, state1, state2, ... stateN }; // 声明并初始化函数指针数组。 有什么问题没有? 《C语言》内容: 函数指针最常见的两个用途是......( 注:IceAge在键盘程序中的应用是函数指针的用途之一。) 首先容我指出一个常见的错误,这是非常重要的。
int f(int); int (*pf)( int )=f ;
在函数指针的初始化之前具有f 的原型是很重要的。否则编译器就无法检查f的类型是否与pf所指向的类型一致。
声明并初始化一个函数指针数组(*functions[])(),唯一需要留心之处就是确保这些函数(state_n())的原型出现在这个数组的声明之前。
*************************************************************
书上讲得很清楚了。可见IceAge 键盘程序的头2条,就犯了一个常见的初级错误。提示他快2天了,他没发现或者认为不算错。
“唯一需要留心之处就是确保...出现在...之前。”所以程序至少应该是这样写:
FUNTION_POINTER functions[] = { state0, state1, state2, ... stateN }; void keyboard() { (*functions[state])();}
谁在谁之前?顺序写反了!
请教授解释一下为什么要这样写?也许是我理解错了? “时间仓促?”那么现在您有足够的时间来再次检查您的程序。明天我贴出论证第二部分,请一定在明天之前修改好所有不完善的地方。
|