问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何定义一个函数指针?

发布网友 发布时间:2022-04-19 14:29

我来回答

4个回答

热心网友 时间:2024-11-15 17:36

  函数指针:
  函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。
  函数指针的声明方法为:
  返回值类型 ( * 指针变量名) ([形参列表]);
  注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
  int func(int x); /* 声明一个函数 */
  int (*f) (int x); /* 声明一个函数指针 */
  f=func; /* 将func函数的首地址赋给指针f */
  或者使用下面的方法将函数地址赋给函数指针:
  f = &func;
  赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
  注2:函数括号中的形参可有可无,视情况而定。
  下面的程序说明了函数指针调用函数的方法:
  例一、

  #include<stdio.h>
  int max(int x,int y){return (x>y? x:y);}
  int main()
  {
  int (*ptr)(int, int);
  int a, b, c;
  ptr = max;
  scanf("%d%d", &a, &b);
  c = (*ptr)(a,b);
  printf("a=%d, b=%d, max=%d", a, b, c);
  return 0;
  }
  

  ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
  不过,在某些编译器中这是不能通过的。这个例子的补充如下。
  应该是这样的:
  1.定义函数指针类型:
  typedef int (*fun_ptr)(int,int);
  2.声明变量,赋值:
  fun_ptr max_func=max;
  也就是说,赋给函数指针的函数应该和函数指针所指的函数原型是一致的。
  例二、

  #include<stdio.h>
  void FileFunc()
  {
  printf("FileFunc\n");
  }
  void EditFunc()
  {
  printf("EditFunc\n");
  }
  void main()
  {
  typedef void(*funcp)();
  funcp pfun=FileFunc;
  pfun();
  pfun=EditFunc;
  pfun();
  }
  

热心网友 时间:2024-11-15 17:36

应该说,没有正确的,因为函数指针申明的时候,参数类型要与指向函数的参数类型一样。正确的应如下:
void (*pf)(int,char*);
pf=fun;

热心网友 时间:2024-11-15 17:37

我告诉你,你的答案是错的,答案是A。
定义一个指向函数的指针变量的一般形式为:类型标识符(*指针变量名)();
在定义了指向函数的指针变量之后,可讲一个函数的入口地址赋给它,也就是把函数名赋值给它,这样就使此指针变量指向了一个指定的函数。

热心网友 时间:2024-11-15 17:37

给pf赋值的只能是指针(因为pf是指针)C中函数无型参
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
传说中嘉庆是被雷劈死的 嘉庆的死和雷电有关吗 IT运维服务IT运维服务 求翻译:かぜさんだって 求日语翻译成中文 不要机翻 有加分 ...连接就出来提示错误651:调制解调器报告了一个错误 ...651:调制解调器(或其他连接设备)报告了一个错误。 请核对用户帐号或... ​天猫无忧购怎么加入?怎么操作? 安乃近和输液……问题无能 望高手进 发烧低烧吃了两片安乃近之后退烧了,但身上长了许多红点,是怎么回事 发烧吃了两片安乃近片 但第二天听说安乃近片副作用强 怎么办 有关系吗... 请问这个函数指针怎么理解? 函数指针(指向函数的指针) 如何使用? 它和回调... c++的函数指针是怎么用的呀? 函数指针怎么用?? 函数指针如何定义 如何定义指向函数的指针? 函数指针怎么调用 C语言函数指针怎么用? SPACE键是什么? 发早上好会占对方很大内存吗?? 怎样调皮的说早上好 韩语早上好怎么说 网上说微信发早上好图片会占对方大内存吗? 广东话早上好怎么说 早上好图片占空间大吗? 微信问候语早上好图片是站内存太大吗?发早上好图... 描写早上好的优美句子 八个字的早上好 早上好什么梗 早上好的句子, c语言函数指针怎么用啊?尤其是main函数 如何通过函数指针调用函数 函数指针? 怎样用函数指针做参数? 函数指针怎么理解*******调用 如何使用函数指针指向几个函数 如何定义一个指向任何函数的函数指针 函数指针是什么?_? 通易付打电话问还用吗,不用的话给注销是真的假的? 通易付plus如何注销 通易付plus里的个人信息怎么注销? 通易付实名认证中为什么要认证信用卡,但信用卡却... 通易付plus骗局通易付为什么刷卡扣了199的服务费?... 通易付pos机注册需要上传身份证和银行卡吗?提供这... 通易付安全吗? 通易付被装机人盗刷不用了会被扣钱吗? 通易付POS机是支付宝免押金领取吗? 通易付plus pos机是正规的吗? 通易付不用了要不要收年费 通易付刷支付宝匹配商户失败