2 samoyedsun SamoyedSun 于 2016.04.18 18:47 提问

关于函数指针的问题,求解!

代码内容图片说明
根据上图代码可以看到两行输出语句内容不同,一个没加取值运算符,一个加了取值运算符!
编译结果图片说明
上图可以看出输出结果是一样的,
根据测试,不加星号与加星号与加N个星号不但不报错而切执行结果都是一样的。
然而普通指针一旦星号加多了就报错,编译不出结果,
请问这是函数指针的特性吗?
请前辈给一个详细真实且合理的回答!

4个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.18 21:40
已采纳
  1. 其实,fun的函数名与_t.function函数指针都是一样的,即都是函数指针。fun函数名是一个函数指针常量,而_t.function是一个函数数指针变量,这是它们的关系。
  2. 但函数名调用如果都得如(*fun)();这样,那书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许fun();这种形式地调用(这样方便多了并与数学中的函数形式一样,不是吗?)。
  3. 为统一起见,_t.function函数指针变量也可以_t.function()的形式来调用。
  4. 赋值时,即可_t.function=&fun形式,也可_t.function=fun

函数指针调用函数是不需要解引用, 但不是不可以解引用
对于函数指针而言,解引用操作,还是这个变量的值。。。依然是个地址
所以可以加很多个*进行解引用(***_t.function)();也是OK的

caozhy
caozhy   Ds   Rxr 2016.04.18 19:34

你说的是对的,对函数取值还是函数

http://ideone.com/uMxdOZ

这里看的很清楚。

tusong86
tusong86   2016.04.18 20:43

函数指针是很特殊的,取地址与不取地址效果都一样,楼主完全可以改成下面这种样子,也是可以的
_t.function = *fun;
_t.function = fun;

CSDNXIAOD
CSDNXIAOD   2016.04.18 18:52

函数指针问题
关于函数指针的问题
函数指针传参问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于在 C 语言结构体中使用函数指针的问题
结构体是 C 语言中一个非常重要的自定义数据类型,它描述了一系列相同类型或不同类型数据构成的数据集合。但是在 C 语言的结构体成员却不能是函数,针对这一问题,本文分析探讨了将函数指针作为结构体成员的理论和方法。通过在结构体中定义函数指针类型的成员,从而实现了在结构体中使用函数的目的。
NDK探究之旅《七》—函数指针,宏定义的优缺点及应用场景
指针:概念 在上一环节中我们都知道,指针: 就是一块内存地址 在计算中所有的数据都必须放到内存之中。如: int i = 2 这行简单的代码可以这样理解: 申请一块内存空间,大小为4个byte 这块内存空间的变量别名为i 用于存放int类型的数据 int 占用4个字节,char 占用1个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像 门牌号、身份证号一
最优连线问题
关于求解最优线路问题
函数指针简单实例
函数指针最简单实例 fuction pointer
STL的仿函数 和函数指针传参
C_age.h //在C语言时代,要将函数当做参数传递,唯有通过函数指针 //以下是用函数指针实现参数传递的示例 # include # include using namespace std; int fcmp(const void *elem1, const void*elem2); void Test() { int ia[10] = { 32, 92, 67, 58, 10, 4,
迷宫问题求解
如果理解了栈,并会应用栈来解决问题,这个迷宫的问题并不难。 主要就是不断的探路,将可行路径入栈,走不下去就出栈,继续由栈顶元素寻找新路。 代码写的不算完美,但答案是正确的。不过按这个方法是没法找最优解的。 /*求解迷宫问题 2013.8.31 by无名*/ #include using namespace std; const int M = 8; const
C语言数据结构顺序栈之迷宫求解最短路径
数据结构习题与解析(B级第3版) 李春葆 喻丹丹 编著 3.2
函数指针在表驱动方法中的应用举例
/*函数指针在表驱动方法中的应用 举例*/#include typedef struct  { int id; void (*func)(void);}funcTable;void func1(){ printf("func1/n");}void func2(){ printf("func2/n");}void main(){ funcTable tab[2] = {{1,fu
面试题精选(65):迷宫最优解的宽度优先解法
【问题描述】有一个用矩阵描述的迷宫,矩阵元素取值0或1(0表示可以进入,1表示不能进入)。现在要找到一条从最左上角到最右下角的最短路径(最左上角和最右下角的矩阵元素均为0)。比如,对于如下4*4矩阵描述的迷宫:0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0,0, 1, 0, 0,0, 0, 0, 0它的最短路径为8(路径上所有位置数),移动方向依次为:右、右、右、下、下、下、
重学C++Primer笔记9---回调函数与函数指针的应用
1 函数指针—指向函数的指针  函数指针是指向函数而非对象的指针。像其他指针一样,函数指针也指向某个特定的类型,函数类型由其返回类型以及形参表确定,而与函数名无关。例如:bool (*pf)(const string &,const string &);   将pf声明为指向函数的指针,带有两个const string&类型的形参和bool类型的返回值。 注意: *pf两侧的圆括号是必须的。 2