首页 > 试题广场 >

若有以下说明和定义,在必要的赋值之后,对fun函数的正确调用

[单选题]
若有以下说明和定义,在必要的赋值之后,对fun函数的正确调用语句是()
int fun (int *c)  { … }
int main(){
    int (*a)(int*)=fun,*b(),w[10],c;
    …
}
  • a=a(w);
  • (*a)(&c);
  • b=*b(w);
  • fun(b);
推荐

【解释】在答案A中,a(w)调用正确,但将其返回值赋值给a是错误的,因为返回值

是整型数,而a是一函数指针,所以答案A是错误的。在答案C中,因b是一个返回值为

整型数指针的函数,*b(w)本身就是错误的;在答案D中,b后面省掉了括号,因为b是函

数,故也是错误的;而对于答案B来说,因为a指向了函数fun,所以它等价于fun(&c)

调用,是正确的。所以正确答案是B

发表于 2018-05-06 23:08:34 回复(2)
首先题目有点问题 b前面的引号改成*号  vs2010结果如图所示
几个点
1. a为函数指针 接受一个int*型变量返回一个int型变量   所以选项A的返回值类型不对
2. a(&c)与(*a)(&c)在调用上是等价的  都等于fun(&c)  B正确
3. int *b();这个很具有疑惑性   它并不是函数指针,而是一个返回值为int*型,无输入参数,而且名为b的函数申明。显然C错误
函数指针要这么写int (*b)();
4. fun函数必须接受int*型的参数  D显然错误
编辑于 2019-04-16 20:15:52 回复(6)
1. a为函数指针 接受一个int*型变量返回一个int型变量   所以选项A的返回值类型不对
2. a(&c)与(*a)(&c)在调用上是等价的  都等于fun(&c)  B正确
3. int *b();这个很具有疑惑性   它并不是函数指针,而是一个返回值为int*型,无输入参数,而且名为b的函数申明。显然C错误
函数指针要这么写int (*b)();
4. fun函数必须接受int*型的参数  D显然错误

如何用函数指针调用函数
  1. int Func(int x);   /*声明一个函数*/
  2. int (*p) (int x);  /*定义一个函数指针*/
  3. p = Func;          /*将Func函数的首地址赋给指针变量p*/
赋值时函数 Func 不带括号,也不带参数。由于函数名 Func 代表函数的首地址,因此经过赋值以后,指针变量 p 就指向函数 Func() 代码的首地址了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# include <stdio.h>
int Max(int, int);  //函数声明
int main(void)
{
    int(*p)(int, int);  //定义一个函数指针
    int a, b, c;
    p = Max;  //把函数Max赋给指针变量p, 使p指向Max函数
    printf("please enter a and b:");
    scanf("%d%d", &a, &b);
    c = (*p)(a, b);  //通过函数指针调用Max函数
    printf("a = %d\nb = %d\nmax = %d\n", a, b, c);
    return 0;
}
int Max(int x, int y)  //定义Max函数
{
    int z;
    if (x > y)
    {
        z = x;
    }
    else
    {
        z = y;
    }
    return z;
}
1
2
3
4
5
输出结果是:
please enter a and b:3 4
a = 3
b = 4
max = 4

发表于 2020-08-05 12:25:04 回复(0)
没看懂题目是啥意思,是因为我这儿乱码了么?
发表于 2019-03-07 11:32:40 回复(2)
这么写变量定义会被打的,大家不要学。
发表于 2021-10-16 12:53:08 回复(0)
int *b();只是函数声明,并无定义,无法调用
发表于 2019-12-01 20:05:23 回复(0)
对于b选项,能这样理解 函数指针的赋值有两种 一 直接等于函数名 二 &函数名
发表于 2024-07-27 13:10:28 回复(0)
函数有返回值不一定要用变量接受
发表于 2023-10-24 20:29:50 回复(0)
对于函数指针调用时要用(*)来解引用后面括号要进行地址的取值
发表于 2021-10-19 16:04:34 回复(0)
b也不对啊,  int类型的数据就单独放那了?
发表于 2021-01-29 14:22:50 回复(0)
关键在于理解后面的都不是函数指针类型,都是整型。
发表于 2020-09-04 00:20:00 回复(0)
a返回值类型不对
发表于 2019-11-04 15:26:44 回复(0)