内容来自《c和指针》,整理后方便个人理解
cdel程序可以方便的给出声明的释义
f is pointer to function returning int
第2个括号是函数调用操作符。第1个括号起到聚组的作用,迫使间接访问在函数调用之前进行,使f成为一个函数指针。f指向的函数返回一个整型值。
g is pointer to function returning pointer to int
和上面的大致相同,区别在于g指向的函数返回一个指向整型指针
为了进一步理解“迫使间接访问在…之前进行”,再举例说明
abc is pointer to array 0…5 of int
先对括号内的*abc求值:迫使间接访问在创建数组之前进行,使abc成为一个指针,abc指向一个数组,数组元素类型是int
f is array 0…9 of pointer to int
f is array of pointer to function returning int
先对*f[]求值:f是数组,元素类型是某种类型的指针
末尾的()是函数调用操作符
f的元素类型是函数指针,指向的函数的返回值是整型
作为参数传递给另一个函数
callback function
概念:把一个函数指针作为参数传递给其他函数,后者将回调用户的函数。
应用场合:
函数需要在不同时刻执行不同类型的工作
执行只能由函数调用者定义的工作
下面这个例子就是用函数指针实现的可以自定义类型的排序函数sort
如果switch操作符的代码是从0开始连续的整数,可以用一个转移表来完成switch语句完成的任务
如果不是从0开始的连续整数,这种情况更合适switch语句。
因为在访问转移表之前,还需要一系列操作把操作符转换为合适的下标。
在转移表,越界访问是十分危险的,测试很难发现bug究竟在哪里,一开始就应该保证转移表使用的下标位于合法的范围内
使用转移表时应添加注释,以弥补转移表的可读性缺陷