Tag Archives: function pointer

玩转函数指针

题外话: 在c99标准(ISO/IEC 9899):TC2,6.7.6(Type names)节中说,类型名在语义上是一个省略了标识符的函数或对象声明 例如: 指向int的指针这样一个类型: int * 相当于: int * pInt 中省掉了标识符pInt 要点:在分析指针相关的表达式时,把自己当成编译器,将表达式执行一遍,你就可以分析出到底是在声明什么了。 1.函数指针 int (*pfunc)(int op1, int op2) 分析: 1).按照优先级规则,先执行”(*pfunc)”,*对pfunc进行间接访问,编译器期待pfunc是一个指针,所以pfunc是一个指向某种类型的指针 2).执行表达式(int op1, int op2),这是个函数调用的样子,可知(*pfunc)的结果是一个函数,从而确定pfunc是函数指针 3).进一步分析,可知指针指向的该函数接受两个int参数,返回int 所以:pfunc是一个函数指针,其指向的函数接受两个int参数,返回int 上面*pfunc外面的括号是必须的,若写成这样: int *pfunc(int op1,int op2) 根据优先级规则,函数调用的优先级高,编译器期待小括号前面的pfunc是个函数,所以pfunc就是一个函数,它接受两个int参数,返回指向int的指针

Posted in Programming | Tagged , | 1 Comment