C语言如何声明一个返回函数指针的函数?

我这样声明为什么不行:int(*)()function();相同的还有返回数组指针的函数怎样声明?我要声明的是一个函数,它返回一个指针,这个指针是一个指向另一个函数的指什... 我这样声明为什么不行:int (*)() function();
相同的还有返回数组指针的函数怎样声明?
我要声明的是一个函数,它返回一个指针,这个指针是一个指向另一个函数的指什!!
展开
 我来答
White_MouseYBZ
2015-09-29 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6381万
展开全部

C语言指向函数的指针承载的信息比较复杂,组织起来要素要写全。根据指向函数的指针的书写语法,下面的代码就是一个返回函数指针的函数:

int (*f(void))(int){//f是函数,没有参数,返回指向一个函数的指针;这个被指向的函数有一个int型形参,且返回一个int值

    return fun;//fun是个函数名,必须具备一个int形参、返回int值的要求

}

以下代码可以验证上述函数的正确性:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int fun(int n){
    printf("abcdef\n");
    return n;
}
int (*f(void))(int){
    return fun;
}
int main(void){
    printf("%d\n",f()(100));//调用函数f,通过f返回的指针用100调用函数fun
    return 0;
}

输出是:

abcdef

100

ryw12403
2008-07-26 · TA获得超过1899个赞
知道大有可为答主
回答量:2501
采纳率:0%
帮助的人:2079万
展开全部
int (*pf)();pf=f; /*f为函数名*/
函数指针变量

在C语言中规定,一个函数总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址。 我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量, 使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。 我们把这种指向函数的指针变量称为“函数指针变量”。
函数指针变量定义的一般形式为:
类型说明符 (*指针变量名)();
其中“类型说明符”表示被指函数的返回值的类型。“(* 指针变量名)”表示“*”后面的变量是定义的指针变量。 最后的空括号表示指针变量所指的是一个函数。
例如: int (*pf)();
表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。
下面通过例子来说明用指针形式实现对函数调用的方法。
int max(int a,int b){
if(a>b)return a;
else return b;
}
main(){
int max(int a,int b);
int(*pmax)();
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);
printf("maxmum=%d",z);
}
从上述程序可以看出用,函数指针变量形式调用函数的步骤如下:1. 先定义函数指针变量,如后一程序中第9行 int (*pmax)();定义pmax为函数指针变量。

2. 把被调函数的入口地址(函数名)赋予该函数指针变量,如程序中第11行 pmax=max;

3. 用函数指针变量形式调用函数,如程序第14行 z=(*pmax)(x,y); 调用函数的一般形式为: (*指针变量名) (实参表)使用函数指针变量还应注意以下两点:

a. 函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。

b. 函数调用中"(*指针变量名)"的两边的括号不可少,其中的*不应该理解为求值运算,在此处它只是一种表示符号。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
silenceandluo
2015-09-10 · TA获得超过1046个赞
知道小有建树答主
回答量:713
采纳率:0%
帮助的人:264万
展开全部
返回值类型名 *函数名( 形参列标 ) //函数名前的*号不能丢
{

.....函数体
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
alaolao
2008-07-26 · TA获得超过794个赞
知道小有建树答主
回答量:1420
采纳率:0%
帮助的人:0
展开全部
typedef int (*AA)();
AA function();
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
你好_我来也
2008-07-26 · TA获得超过5677个赞
知道大有可为答主
回答量:5255
采纳率:0%
帮助的人:5391万
展开全部
int (*(* func)())();
int* (*func1)();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式