为了账号安全,请及时绑定邮箱和手机立即绑定

int (*pquadrate)(int a) = &quadrate;是啥意思?

不太明白(*pquadrate)后面为啥还有个(int a) ??

正在回答

5 回答

这是函数指针声明。

这是将pquadrate声明为函数指针,它指向的是有一个int型参数,返回值为int的函数。这语句同时将pquadrate初始化为quadrate的地址(显然quadrate应该是个函数名)。


一步一步讲这个声明:

  • 这语句声明的是pquadrate变量,前面有个*,而且是用小括号和变量名括起来的(*pquadrate),表明这个变量名优先和*结合。声明变量时前面有*就代表这个变量是指针,所以pquadrate是个指针。那它指向什么呢?

  • 接着看,后面有小括号,前面有类型,表明是个函数。参数就是int a,返回值是int型。所以pquadrate是指向这样的函数的指针。

7 回复 有任何疑惑可以回复我~
#1

帅踢锅 提问者

请问,后面的参数int a应该不需要与quadrate函数声明中的一致吧?另外,可以否省略写成(*pquadrate)(int),这样做规范吗?
2015-07-30 回复 有任何疑惑可以回复我~
#2

onemoo 回复 帅踢锅 提问者

完全可以不写a。 函数声明中的参数列表只需要写出各个参数的类型,写不写参数名无所谓(其实编译器也不理会你写的名字)。
2015-07-31 回复 有任何疑惑可以回复我~
#3

帅踢锅 提问者

回答非常详细!感谢onemoo同学
2015-07-31 回复 有任何疑惑可以回复我~

厉害了,大神呀

0 回复 有任何疑惑可以回复我~

厉害 。。。


0 回复 有任何疑惑可以回复我~

原来如此

0 回复 有任何疑惑可以回复我~

谢谢你的解释!

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

int (*pquadrate)(int a) = &quadrate;是啥意思?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信