关于C语言函数指针的问题?

#include<stdio.h>voidprint(){printf("helloworld!\n");}intmain(void){void(*fuc)();fuc=... #include <stdio.h>
void print()
{
printf("hello world!\n");
}
int main(void)
{
void (*fuc)();
fuc = print ;
fuc(); // (*fuc)()
}
上面这段代码,最后的那个fuc()函数,为什么写fuc()和 (*fuc)()都是对的?
展开
 我来答
CodeBlove
2020-01-10 · TA获得超过3364个赞
知道小有建树答主
回答量:936
采纳率:79%
帮助的人:239万
展开全部
首先,编译器对于很多操作都有隐式转换.

其次,函数指针指向的是编译后的函数代码(机器指令)的首地址.

因此你用星号操作指针难道要访问指令吗?函数唯一的访问方式就是调用,因此编译器做了默认处理,无论有没有星号都是调用函数,这种由编译器自动决定操作叫隐式转换.(其他编译器有可能会报错)

PS:尽量不要利用隐式转换而偷懒,因为依赖编译器的自动功能会存在安全隐患,因为不同的编译器隐式转换有所不同,代码还是明确点比较安全.因为即便更新编译器版本你的程序也不会出问题.
百度网友3b5a5d8
2020-01-10 · TA获得超过1229个赞
知道大有可为答主
回答量:1279
采纳率:83%
帮助的人:129万
展开全部
你好,
我也一脸茫然,于是去百度了:C语言-函数指针与函数名的区别***
得出结论:
函数名的使用基本等价于函数指针,函数名、取地址&、取内容*得到的都是函数的地址。
函数名也可以(* <函数名>)()来调用,只是这种方法读写都不方便,所以被简化了。
函数名和数组名实际上都不是指针,但是,在使用时可以退化成指针,即编译器可以帮助我们实现自动的转换。
题主可以自己百度一下:C语言-函数指针与函数名的区别***
果然我还是很无知的。
祝你生活愉快。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式