大众信息网

C语言,a=fun;(*a)(&c);是什么意思?

答案:5  mip版
解决时间 2021-03-03 17:24
  • 提问者网友:落叶、牵绊着思念
  • 2021-03-03 13:42
若有以下说明我定义:
#include<stdio.h>
main()
{ int (*a)(int*), *b( ), w[10], c;
......
}
int fun(int *c) {...}
则以下选项中能正确调用fun函数是
A. a=fun; a(w); B. a=fun; (*a)(&c); C. b=fun; *b(w); D.fun(b);
为什么?请详解!
最佳答案
  • 二级知识专家网友:时光暗淡了承诺
  • 2021-03-03 14:13
int (*a)(int*), 是指针函数,指针a指向这个函数的入口地址。
a=fun,就是a这个指针指向一个名为fun的地址,则*a就是函数名fun,
所以(*a)(&c) 等价于 fun(&c),它是对函数 int fun(int *c) 的一次调用,int * c 说明fun函数的参数是地址,所以&c也符合fun的参数要求。

答案 B
全部回答
  • 1楼网友:凊搽蒗囝
  • 2021-03-03 16:59
D.fun(b); 前面3个不是函数调用不对吧
  • 2楼网友:没仙气的仙女
  • 2021-03-03 15:33
这样的写法在c语言中表示调用。 具体有两种可能。 1 函数调用。 如果fun是一个函数,这里表示调用对应函数,执行该函数的功能。a,b两个变量为函数的实参。 2 宏调用。 如果fun是一个带参数的宏,fun(a,b)为调用该宏,程序会将a,b替换到宏的对应位置执行。 3 区分宏和函数。 查找定义位置,如果为#define fun(x,y) 的形式,则为宏。 如果为 type fun(var1_type x, var2_type y) 的形式,则为函数。
  • 3楼网友:会有一股神秘感
  • 2021-03-03 15:11
我们把定义拆开来看 int (*a)(int*),声明的是一个函数指针, int *b( ), 声明的是返回类型为int*的函数, int w[10], 声明的是int型的数组, int c, 声明的是int型变量。 所以c和d不正确。 b答案正使用函数真的的方法不正常, 所以答案是A。 函数指针的使用示例如下 int (*p)();//第一个括号一定要加,不然会变成声明函数 int a(); //声明函数 p=a; //对函数指针赋值 a(); //利用指针调用函数
  • 4楼网友:笑尽沧桑
  • 2021-03-03 14:42
这里可以看出,a是一个指向函数的指针,fun是一个函数,其参数只有一个指针型参数,(*a)(&c)即通过该指向函数的指针调用fun函数,&c表示取c的地址。 示例:求一个数的绝对值程序 #include <stdio.h> int abs(int* x) {     return (*x)>0?*x:-(*x); } int main() {     int (*p)(int*);     int a, c;     p = abs;     scanf("%d",&c);     a = (*p)(&c);//指针调用     printf("c=%d,abs=%d\n",c,a);     return 0; } 注意事项: 1. 指向函数的指针变量的一般定义形式为: 数据类型 (*指针变量名)(函数参数列表)//这里数据类型就是函数返回值的类型2. 定义一个指向函数的指针变量 p, 它不是固定指向哪一个函数的,而只是表示定义这样一个类型的变量,该指针变量是专门用来存放函数的入口地址的。在程序中把哪一函数的地址赋给该指针变量,该指针变量就指向哪一个函数。在一个函数中,一个函数指针变量可以先后指向同类型的不同函数。 3. 在给函数指针变量赋值时,只需给出函数名而不必给出函数参数,因为是将函数的入口地址赋给 p ,而不涉及 实参和形参的结合问题。 4. 在函数调用时,只需将( *p ) 代替函数名即可,后面实参依旧。 5. 对于指向函数的指针变量,像 p++ ,p+n.....是无意义的。
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯