首页 > 试题广场 >

有如下程序段: char fun(char *); main

[不定项选择题]
有如下程序段:
char fun(char *);
main() { char *s = "one", a[5] = {0}, (*f1)(char *) = fun, ch; }
则对函数fun的调用语句正确的是
  • *f1(&a);
  • f1(*s);
  • f1(&ch);
  • ch = *f1(s);要改成(*f1)(s)才正确
CD 都正确,
D是正确的啊,不知道下面都是啥意思?  
函数指针在C++premier plus上写的很清楚,函数指针可以 直接用f1(s)  也可以用 (*f1)(s) ,但是*f1(s)是错误的. D是可以的.
发表于 2015-04-26 14:49:22 回复(5)
通过指针调用函数的两种形式:
1、ret = (*p)();
2、ret = p();
对函数指针赋值的两种形式:
1、pf = &func;
2、pf = func;
发表于 2020-03-04 21:14:47 回复(0)
关于D答案:
要正常使用f1应该使用(*f1)(s),与f1(s)效果相同。
*f1(s)中()的优先级比*高,()先与f1(s)结合,返回结果是char,*f1(s)是对返回结果解引用。
验证:
char s_char = 'a';
char* fun(char *){
	return &s_char;
};
int main()
{
	char *s = "one", a[5] = { 0 }, *(*f1)(char *) = fun, ch;
	ch = *f1(s);
	cout << ch;
	return 0;
}
//输出 a


编辑于 2017-06-05 21:15:01 回复(0)

指针函数: 是指函数返回值是某一类型的指针,本质是一个函数。

指针函数的定义为: 类型名 函数名(参数表列); 例如: int a(int x, int y);

指针函数是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且在主调函数中,函数返回值必须赋给同类型的指针变量。

函数指针: 是指向函数的指针变量,即本质是一个指针变量。

函数指针的定义为: 函数类型 (变量名)(函数形参表);例如:int (p)(int, int);

int (*P) (int x); //声明一个函数指针
p = func; //将func函数的首地址赋给指针p
//可以采用如下两种方式来通过指针调用函数
x = (*p)();
x = p();

主要的区别是一个是指针变量,一个是函数。在使用是必要要搞清楚才能正确使用
具体参考:http://nevel.cnblogs.com/p/6370264.html

发表于 2018-03-16 08:52:33 回复(2)
其中f1为函数指针,对函数指针的调用,可以有以下方式:f1(&s)   (*f1)(&s)
发表于 2017-08-11 14:55:53 回复(0)
C没有分号。垃圾题目
发表于 2016-05-08 23:42:56 回复(1)
函数指针可以直接用f1(s)也可以(f*1)(s)
发表于 2020-07-26 10:59:45 回复(0)
f1为指向函数fun()的函数指针,调用方式有两种,f1(char *)或者(*f1)(char *)
发表于 2019-03-06 15:06:54 回复(0)
D为啥不正确呢,,没懂
发表于 2015-08-22 15:36:57 回复(0)
定义了一个函数指针(*f),参数表照抄就行,就是(*f1)(char *),让该指针指向函数fun,函数名本身就是函数的地址,所以直接用f1=fun即可,最后ch是一个字符,参数表是一个指针,所以用f1(&ch,),(*f)类比数组指针就明白了。
发表于 2022-01-04 21:03:38 回复(1)
这是函数指针,可以通过函数指针调用函数/ 
类型说明符 (*指针变量名)   (参数)
ch=(*f1)(参数);   //函数调用
ch=f1(参数);
发表于 2020-01-16 15:36:22 回复(0)
函数指针的正确使用方式
发表于 2019-05-17 10:48:25 回复(0)
函数指针在C++premier plus上写的很清楚,函数指针可以 直接用f1(s)  也可以用 (*f1)(s) ,但是*f1(s)是错误的. D是可以的.
发表于 2018-08-10 11:02:11 回复(0)
出题人太不严谨了,没写清楚。
发表于 2018-06-02 19:05:12 回复(0)
C项并没有赋值,应该不能直接取地址吧?大神请回答下我的疑问呀呀呀呀呀。。。。。。。?
发表于 2018-05-31 18:45:33 回复(0)
函数指针调用方式
发表于 2017-06-10 18:49:31 回复(0)
f1(s)返回char,*f1(s)就成了char*了
发表于 2016-08-02 09:24:29 回复(0)
还是不明白D是什么意思。。
发表于 2016-06-18 17:31:28 回复(2)
在VS2015上面测试CD选项都是正确的
发表于 2016-03-20 15:19:28 回复(0)
CD,f1为函数指针
A应改为:(*f1)(a)或f1(a)
B应改为:(*f1)(s)或f1(s)
发表于 2015-10-28 16:17:27 回复(0)