若有以下说明我定义:
#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);
为什么?请详解!
C语言,a=fun;(*a)(&c);是什么意思?
答案:5 mip版
解决时间 2021-03-03 17:24
- 提问者网友:落叶、牵绊着思念
- 2021-03-03 13:42
最佳答案
- 二级知识专家网友:时光暗淡了承诺
- 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
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.....是无意义的。
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯