指定C语言函数指针时是否需要星号?两种写法差异解析
C语言中两种函数指针参数写法的区别
这两种写法在实际语义上完全等价——编译器会自动把第一种写法隐式转换成第二种的函数指针形式,本质上没有区别。
C语言的语法规则里有这么一条:当你在函数的参数列表中声明一个函数类型(比如double f(double)),它会被自动转换为指向该类型函数的指针(也就是double (*f)(double))。这算是个语法糖,让代码写起来更简洁,不用每次都写那对括号和星号。
举个实际的例子,不管你用哪种方式声明foo,调用的时候传函数名或者函数的地址都能正常工作:
double bar(double x) { return x * 2; } // 两种调用方式都合法 foo(bar, 123); foo(&bar, 456);
而且在foo函数内部,不管参数是哪种写法,你使用f的时候都可以直接当成函数来调用(比如f(3.14)),这也是C的语法糖——函数指针可以不用显式解引用就能调用对应的函数,本质上和(*f)(3.14)是一样的。
内容的提问来源于stack exchange,提问作者Catstail
相关产品推荐
相关产品推荐

