c语言指向函数的指针的指针
⑴ c语言指向函数的指针 求翻译
#include<stdio.h>
intf1(int(*f)(int));//函数指针
intf2(inti);
intmain(void)
{
printf("Answer:%d ",f1(f2));//指向f2
return0;
}
intf1(int(*f)(int))//定义函数指针
{
intn=0;
while((*f)(n))n++;//回调函数,当指针不是NULL时,代入n
return0;
}
intf2(inti)
{
returni*i+i-12;
}
//也就是每个函数入口都是一个地址
//函数无它,唯指令集合而已,上面只是换个地址执行指令而已
⑵ C语言——指向函数的指针
c语言中叫做回调函数,将函数指针(如max)作为函数的参数,函数(如fun)中调用这个参数指向的函数,
调用函数(fun)时看情况而给函数传入不同的函数指针
例如fun(a,b,min),那么fun函数调用执行三个参数就调用min函数
参数的定义要与传入的函数指针相匹配
例如fun(int,x,int y,(*p)(int,int)) 那么调用fun(a,b,min)时,min的参数必须是(int ,int)
⑶ C语言指向函数的指针问题
int (*p1)(int, int);
⑷ c语言 指向返回指针的函数的指针的写法
你的陈述不太全,缺返回的指针指向的类型。写法如下:
char *(*p)(int,int);//声明p是指向一个具有两个int型形参的函数,函数返回一个char *型指针。
⑸ C语言指向函数指针问题
#include
<stdio.h>
void
main()
{
int
max(int
,int
);
int
(*p)(int
,int);
p=max;
//此处利用
p=max是正确的指向函数的指针的用法,p指向max的入口地址
//此处用*p=max得到相同结论,为什么呢?因为你这样赋值之后*p的内容就是max
//所以在执行(*p)(q,w)它时其实是执行的(max)(q,w),如果是p=max此时执行(*p)(q,w)是等价于执行max(q,w)。
int
q,w;
printf("please
input
the
two
numbers:\n");
scanf("%d%d",&q,&w);
printf("the
larger
number
is:%d",(*p)(q,w));
}
////////////////////////////////////
int
max(int
a,int
b)
{
if(a>b)
return
a;
else
return
b;
}
⑹ C语言指向函数的指针
#include<stdio.h>
#include<math.h>
void main()
{float area(float a,float b); //错在这里在使用area函数之前 ,必须要声明
float a,b,s,l;
printf("输入两直角边的长度:");
scanf("%f%f",&a,&b);
float (*p)(float,float); //错在这里要加上形参
float lenght(float a,float b);
p=area;
s=(*p)(a,b);
l=lenght(a,b);
printf("面积=%.2f\t斜边长=%.2f\n",s,l);
}
float area(float a,float b)
{
float s;
s=a*b/2;
return s;
}
float lenght(float a,float b)
{
float l;
l=sqrt(a*a+b*b);
return l;
}
⑺ c语言:关于指向函数的指针编程
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
voidvirtualFun(intchoice,intn,char*str[],char*(*p)(int,char**));
char*maxs(intn,char*s[]);//此函数通过指向函数的指针调用
char*mins(intn,char*s[]);//此函数通过指向函数的指针调用
char*minc(intn,char*s[]);//此函数通过指向函数的指针调用
voidMenu();
char*(*func)(intn,char**);
intmain(){
char*name[]={"FOLLOWME","BASIC","GREATWALL","FORTRAN","COMPUTERDESIGN"};
intn=5;
charch=0;
while(ch!=4){
Menu();
ch=getchar();
getchar();//ignore' '
ch=ch-'0';
virtualFun(ch,n,name,func);
}
return0;
}
voidvirtualFun(intchoice,intn,char*str[],char*(*p)(intn,char**name)){
switch(choice){
case1://maxstring
p=maxs;
break;
case2:
p=mins;
break;
case3:
p=minc;
printf("[resultis:%c] ",*p(n,str));//becausethereturnisachar
default:
return;
}
printf("[resultis:%s] ",p(n,str));
}
char*maxs(intn,char*s[]){
inti;
char*max=s[0];
for(i=1;i<n;i++){
if(strcmp(max,s[i])<0)
max=s[i];
}
returnmax;
}
char*mins(intn,char*s[]){
inti;
char*min=s[0];
for(i=1;i<n;i++){
if(strcmp(min,s[i])>0)
min=s[i];
}
returnmin;
}
char*minc(intn,char*s[]){
inti;
charch=s[0][0],*p,*r=s[0];
for(i=0;i<n;i++){
p=s[i];
while(*p++){
if(*p>0x20&&ch>*p){
ch=*p;
r=p;
}
}
}
returnr;
}
voidMenu(){
charmenu[]="1maxstring
2minstring
3minchar
4exit ";
printf("%s",menu);
}
⑻ 求教C语言的指向函数的指针
*fun是指创建的指向这个这个函数的指针变量名为fun,因为你的return sp中sp是指针变量,所以fun也必须为指针; 当然,如果不需要返回值,用fun也可以
⑼ C语言的指向函数的指针的问题
函数指针就是一个函数的首地址,这个在汇编里面最好看明白了.
比如:int * a (int i, int j) ; 假设a的值是:0x3312FF80,,下面是汇编调用的例子.
push j
push i
call 0x33FF80
上面是调用方法,而int* a(int i, int j); 的返回值也很容易看出来,返回一个DWORD类型的一个指针而已.反汇编应该是 return n;这里的n是四个字节,应为返回是一个指针类型,在32位下指针就是4字节.
我有仔细研究了下你的问题,你是弄不明白 int* a() 和int (*p)() 吗?还是别的什么意思?请继续追问.
是否可以解决您的问题?
⑽ c语言指向函数的指针问题
首先,这个代码连编译的过不了
单从你主函数的x=sub(p,q,3),我也不知道你那是q还是9。
忽略编程的角度,单从题目的大意,把你的q当做是9
x = sub(p,9,3) = funa(9,3) = 9+3 = 12;
x += sub(funb,8,3),x = x+funb(8,3) = 12 + (8-3) = 17
结果是17