永发信息网

函数指针问题

答案:4  悬赏:80  手机版
解决时间 2021-05-06 13:32

假如调用函数输入&A对应被调用函数的*X,

那么意思是把A的地址复制给X还是复制给*X。

重点是为什么?如果是复制给X,那么那个*只是作为说明X是指针么?

最佳答案

我想楼主并不是想问函数指针吧,根据楼主对问题的描述,他实际上是说类似:


fun(int * p);


int a = 1;


fun(&a);


的问题。


其实很简单,*一般称指针运算符,&地址运算符,而在定义一个变量的时候*只是表示这是一个指针。


所以上面int *p表示p是一个整形指针,然后调用的时候&a取得了a的地址,并传递给fun(int *),即是你所谓p=&a;


而*作为运算符出现时,表示反向引用,即对p所表示的地址空间进行操作。


所以如果你问的函数指针,那么以函数指针为参数的 fun(int (*pfun)()),因为C语言本身用函数名表示函数的入口地址,所以调用时你可以写成 fun(&functionname),也可以写成 fun(functionname),都不错。同样定义中的*也只是表示指针而已。


后面还有关于(*fun)(param)的调用方式的讨论,其实你可以这么理解,函数名是函数的地址,那么我们必须要先进行一个反向引用去取得这个“函数”即是*的作用,然后进行“()”运算即函数运算(调用)。当然这个和数组又不同,所以去记忆理解这些东西,即晦涩对你还没帮助,所以呢(*FUN)(PARAM)这种调用方式你最好是当成没看到最好。


全部回答

首先一个函数例如:

void fun() ,函数名对于编译器来说就是做为一个地址表示的,所有调用并不需要&fun

void (*pfun)() == 函数指针指向一个一个无参数返回类型为void的指针当

pfun = fun  这是个赋值过程将fun的地址赋予pfun,(pfun是个指针,其存储的男人就是fun地址),也可以写成pfun = &fun

pfun() 调用fun函数,这里你可能会疑惑为什么不是(*pfun)(),因为前面说了pfun存储的是fun的地址那么必须要*pfun才表示fun地址哈?没错你也可以写成(*pfun)(),也是调用fun,这所有的只是C编译器的解析,它认为pfun() 和(*pfun)()是一样的

啥意思?应该是将地址传给X,而数据传给*X
你先告诉我函数声明是怎样的,然后告诉我你调用时怎么写,才能给你解答,你的提问歧义很多,因为函数本身也可以是指针。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
u盘无法格式化怎么弄?
鬼武者有几部
物有所值,有所不值?
现在的PSP3000市价多少,破解的游戏多不多,
2009年度最热卖的衣服是那种款式的?
史上谁演的电影又好看又好笑?
好关于立春的谚语,关于春天的谚语有哪些
怎么设置记住密码
为什么角色有时候眼睛会变形?
有没有建筑大师在啊 想问个问题啊 急急急急
我的windows7开机后右下角显示音频服务未运行
我国的三大产业是哪些?
想问问,真的有“天堂鸟”这种花吗?是否是生
河北省栾城县南柴村佳欣草坪种植厂电话是多少
是不是爱就那么伤害人?
推荐资讯
大唐无双侠隐怎么配天赋技能点?
怎么让她喜欢我
十八岁是成熟了吗
摩托罗拉A1200手机的问题
糖稀制作的方法
铁西国美电器电话
广州番禺市桥星海公园对面的餐厅叫什么名字
为值么农场应用都打不开了
金茂苑这个地址在什么地方,我要处理点事
这是什么电影 有图
表达天气很热的诗句,天气热,要红包语录
我好怕生孩子噢,怎么办?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?