问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言函数指针定义

发布网友 发布时间:2022-04-23 09:42

我来回答

5个回答

热心网友 时间:2023-10-09 21:08

在最上面加一句这样的定义
typedef void*(*pFn)();
pFn可以这样理解:首先pFn是一个指针,指针指向一个函数(或者说pFn是一个函数指针),此函数返回一个无类型的指针。最终定义的变量及函数都是指针罢了,不过是指针的类型不同。所以在编译时会有警告,说指针类型不匹配。但对于程序来讲,都是可以在特定的上下文中使用的。
运行结果是
t1,t2交替出现。

其实void也可以换为其它的类型如int, double等

又想到一个很好的办法:
这次编译不会有警告,运行也不会出错。
示例代码如下所示
#include <stdio.h>

long t1();
long t2();

int main()
{
long(*fn)()= (long (*)()) t1 ;

while(1){
fn = (long (*)()) fn();
}
}

long t1()
{
printf("t1\n");
return (long)t2 ;
}

long t2()
{
printf("t2\n");
return (long)t1 ;
}

热心网友 时间:2023-10-09 21:09

函数指针就是函数的指针。它是一个指针,指向一个函数。看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * p2); 看看上面三个表达式分别是什么意思? C):这很容易,fun3 是函数名,p1,p2 是参数,其类型为char *型,函数的返回值为char *类型。 B):也很简单,与C)表达式相比,唯一不同的就是函数的返回值类型为char**,是个二级指针。 A):fun1 是函数名吗?回忆一下前面讲解数组指针时的情形。我们说数组指针这么定义或许更清晰: int (*)[10] p; 再看看A)表达式与这里何其相似!明白了吧。这里fun1 不是什么函数名,而是一个指针变量,它指向一个函数。这个函数有两个指针类型的参数,函数的返回值也是一个指针。同样,我们把这个表达式改写一下:char * (*)(char * p1,char * p2) fun1;

热心网友 时间:2023-10-09 21:09

pFn fn = t1 ;
pFn t1();
这个怎么定义啊
t1返回 函数指针, 又是函数指针的初始值,搞笑把楼主
这不是死循环了!
typedef int(*pFn)(int p);
pFn fn = t1;->说明t1为:int t1(int p);
pFn t1();//error
楼主你太有才了

热心网友 时间:2023-10-09 21:10

好像不行啊,加了typedef void* (*pFn)(void);这一句会出现这样的错误
“return”: 无法从“pFn (__cdecl *)(void)”转换为“pFn”,
实在想不通,反回函数名应该使用什么类型。

热心网友 时间:2023-10-09 21:10

【函数指针】
在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。
1.函数指针定义
函数类型 (*指针变量名)(形参列表);
“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。
例如:
int (*f)(int x);
double (*ptr)(double x);
在定义函数指针时请注意:
函数指针和它指向的函数的参数个数和类型都应该是—致的;
函数指针的类型和函数的返回值类型也必须是一致的。
2.函数指针的赋值
函数名和数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指针指向函数名就行了。
例如,
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
3.通过函数指针调用函数
函数指针是通过函数名及有关参数进行调用的。
与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;如果pf是指向某浮点型变量f的指针,则*pf就等价于它所指的变量f。同样地,*f是指向函数func(x)的指针,则*f就代表它所指向的函数func。所以在执行了f=func;之后,(*f)和func代表同一函数。
由于函数指针指向存储区中的某个函数,因此可以通过函数指针调用相应的函数。现在我们就讨论如何用函数指针调用函数,它应执行下面三步:
首先,要说明函数指针变量。
例如:int (*f)(int x);
其次,要对函数指针变量赋值。
例如: f=func; (func(x)必须先要有定义)
最后,要用 (*指针变量)(参数表);调用函数。
例如: (*f)(x);(x必须先赋值)
【例】任意输入n个数,找出其中最大数,并且输出最大数值。
main()
{
int f();
int i,a,b;
int (*p)(); /* 定义函数指针 */
scanf("%d",&a);
p=f; /* 给函数指针p赋值,使它指向函数f */
for(i=1;i<9;i++)
{
scanf("%d",&b);
a=(*p)(a,b); /* 通过指针p调用函数f */
}
printf("The Max Number is:%d",a)
}
f(int x,int y)
{
int z;
z=(x>y)?x:y;
return(z);
}
运行结果为:
343 -45 4389 4235 1 -534 988 555 789↙
The Max Number is:4389
函数指针
函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址。
函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数。
函数指针的声明方法:
数据类型标志符 (指针变量名) (形参列表);
一般函数的声明为:
int func ( int x );
而一个函数指针的声明方法为:
int (*func) (int x);
前面的那个(*func)中括号是必要的,这会告诉编译器我们声明的是函数指针而不是声明一个具有返回型为指针的函数,后面的形参要视这个函数指针所指向的函数形参而定。
然而这样声明我们有时觉得非常繁琐,于是typedef可以派上用场了,我们也可以这样声明:
typedef int (*PF) (int x);
PF pf;
这样pf便是一个函数指针,方便了许多。当要使用函数指针来调用函数时,func(x)或者 (*fucn)(x) 就可以了,当然,函数指针也可以指向被重载的函数,编译器会为我们区分这些重载的函数从而使函数指针指向正确的函数。
例子:

typedef void (*PFT) ( char ,int );
void bar(char ch, int i)
{
cout<<"bar "<<ch<<' '<<i<<endl;
return ;
}
PFT pft;
pft = bar;
pft('e',91);
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
重磅|8月1日起 报关单的填法将重大改变 进出口权需要报关员么 宝宝被莫名的虫子咬了又红又肿又痒怎么? 北京疫情个为数是什么意思? 在做刀伤的手术时没有接上神经是医院的过错吗? 手术室收费项目有哪些 手术室的秘密:一台10万的手术,主刀医生拿多少?答案颠覆你的认知 阿里巴巴中修改产品信息只修改一小部分行吗?谢谢 可否给我一个阿里巴巴的序列号~谢谢了 阿里巴巴店铺产品搜索框代码谁有呢,给我发一下谢谢了! 落花歌词林心如 c语言的函数指针举个例子 个人土地如果被国家征收怎么赔偿 什么是海牙认证? 复磷酸盐(又叫:硅磷晶、硅丽晶)能阻止水垢形成吗?对人体健康是否有害? C语言中,指针函数和函数指针有什么区别? 有首歌里歌词是“冷冷的夜里面北风吹,才知道离别的滋味”,是什么歌 有机硅皮革怎么区别好坏? c语言指针函数 关于C语言函数指针的问题? 有一首歌的歌词叫冷冷的夜冷不过这份情,暖暖的泪暖不过冷冷的心,你的心`我的 C语言中的函数指针 c语言中函数指针是什么 有什么用 举个实例 “冷冷的夜里北风吹,找不到人来陪。”是什么歌? C语言中函数指针用法 找歌,歌词如下。 冷冷的夜,太凄美,哮血的堡垒 神的旨意,被违背,族人的伤悲 面对永恒之塔燃炔破碎 C语言函数指针 求歌名:……冷冷的夜随风吹,吹出了离别的滋味……人生这杯酒怎么喝都是醉…… C语言函数指针怎么用? c语言函数指针的作用。 海牙认证(apostille认证)是什么意思 国家征收农民土地怎么赔偿 C语言函数指针定义法 《冷冷的夜里被风吹,找不到人安慰;当初的誓言太完美,让相思化成灰。》请问这首歌的歌名叫什么。 什么是apostille,哪些文件可以办理海牙认证 求解释c语言函数指针的作用 c语言中函数名就是一个指针吗 郭富城的《天涯》 歌词 国家征收土地到底每亩要赔偿多少钱 西班牙的海牙认证是什么? c语言函数与指针 我喜欢的一首歌,不过忘了歌名,歌词好像是“冷冷的夜太凄美,嗜血的堡垒,神的旨意被违背,族人的伤悲。 农村土地如果被占用应如何赔偿? c语言,函数里的指针问题? 歌词“冷冷的夜里北风吹、找不到人安慰、当初的誓言太完美、让相思化成灰、、”是哪首歌里面的? 什么海牙认证? 房子被政府违法强拆如何赔偿 关于c语言的函数指针 是谁在冷冷的夜,我的心事你没发觉.这是哪首歌的歌词? 什么是香港公司海牙公证Apostille