注册 登录
编程论坛 C语言论坛

c语言代码

小文子09 发布于 2020-02-28 10:10, 2775 次点击
#include <stdio.h>
void main()
{
    int max(int x,int y);
    int min(int x,int y);
    int add(int x,int y);
    void poe(int x,int y,int(*fun)(int,int));
    int a,b;
    printf("请输入值:");
    scanf("%d %d",&a,&b);
    printf("max=");
    poe(a,b,max);
    printf("min=");
    poe(a,b,min);
    printf("add=");
    poe(a,b,add);
   
}
int max(int x,int y)
{
    int temp;
    temp=x>y?x:y;
    return temp;
}
int min(int x,int y)
{
    int temp;
    temp=x<y?x:y;
    return temp;
}
int add(int x,int y)
{
    return x+y;
}
void poe(int x,int y ,int(*fun)(int,int))
{
    int result;
    result=(*fun)(x,y);
    printf("%2d\n",result);

}
上面的代码如果把int(*fun)(int,int)改成无参数就出错了总提示这个:error C2664: 'poe' : cannot convert parameter 3 from 'int (int,int)' to 'int (__cdecl *)(void)'
哪位大佬可以解释为什么,怎么解决???
7 回复
#2
forever742020-02-28 16:40
解决啥?为啥要改?

#3
叶纤2020-02-28 17:07
程序代码:

#include <stdio.h>
void main()
{
    int max(int x,int y);
    int min(int x,int y);
    int add(int x,int y);
    void poe(int result);//zhe
    int a,b;
    printf("请输入值:");
    scanf("%d %d",&a,&b);
    printf("max=");
    poe(max(a,b));//
    printf("min=");
    poe(min(a,b));//
    printf("add=");
    poe(add(a,b));//
   
}
int max(int x,int y)
{
    int temp;
    temp=x>y?x:y;
    return temp;
}
int min(int x,int y)
{
    int temp;
    temp=x<y?x:y;
    return temp;
}
int add(int x,int y)
{
    return x+y;
}
void poe(int result)//
{
printf("%d\n",result);

    }



#4
叶纤2020-02-28 17:10
你那个代码在我的编译器报错的
修改一下,楼主的问题是为什么不能用void,当然不能啊,因为void是被调用者,可以结收参数,但是不向调用方返回任何值

[此贴子已经被作者于2020-2-28 17:27编辑过]

#5
吹水佬2020-02-28 17:24
#include <stdio.h>

typedef int(*FUN)(int, int);

void main()
{
    int max(int x,int y);
    int min(int x,int y);
    int add(int x,int y);
    void poe(int x,int y, FUN fun);
    int a,b;
    printf("请输入值:");
    scanf("%d %d",&a,&b);
    printf("max=");
    poe(a,b,max);
    printf("min=");
    poe(a,b,min);
    printf("add=");
    poe(a,b,add);

}
int max(int x,int y)
{
    int temp;
    temp=x>y?x:y;
    return temp;
}
int min(int x,int y)
{
    int temp;
    temp=x<y?x:y;
    return temp;
}
int add(int x,int y)
{
    return x+y;
}
void poe(int x,int y, FUN fun)
{
    int result;
    result=fun(x,y);
    printf("%2d\n",result);

}
#6
吹水佬2020-02-28 17:43
都用指针表达
#include <stdio.h>

typedef int(*FUN)(int, int);

int max(int x,int y)
{
    return x>y?x:y;
}
int min(int x,int y)
{
    return x<y?x:y;
}
int add(int x,int y)
{
    return x+y;
}
void poe(int x,int y, FUN fun)
{
    printf("%2d\n",fun(x,y));
}

void main()
{
    int a,b;
    printf("请输入值:");
    scanf("%d %d",&a,&b);
    FUN f[3] = {max, min, add};
    char *s[3] = {"max=","min=","add="};
    int i;
    for (i=0; i<3; ++i)
    {
        printf(s[i]);
        poe(a,b,f[i]);
    }
}




[此贴子已经被作者于2020-2-28 17:46编辑过]

#7
小文子092020-02-29 16:31
回复 4楼 叶纤
对代码编译是错误。我就是想知道提示错误的内容大概什么意思
#8
叶纤2020-02-29 16:44
以下是引用小文子09在2020-2-28 10:10:11的发言:

#include <stdio.h>
void main()
{
    int max(int x,int y);
    int min(int x,int y);
    int add(int x,int y);
    void poe(int x,int y,int(*fun)(int,int));//中文的逗号?!没有中文的符号
    int a,b;
    printf("请输入值:");
    scanf("%d %d",&a,&b);
    printf("max=");
    poe(a,b,max);
    printf("min=");
    poe(a,b,min);
    printf("add=");
    poe(a,b,add);
   
}
int max(int x,int y)
{
    int temp;
    temp=x>y?x:y;
    return temp;
}
int min(int x,int y)
{
    int temp;
    temp=x<y?x:y;
    return temp;
}
int add(int x,int y)
{
    return x+y;
}
void poe(int x,int y ,int(*fun)(int,int))//中文的逗号?
{
    int result;
    result=(*fun)(x,y);
    printf("%2d\n",result);

}
上面的代码如果把int(*fun)(int,int)改成无参数就出错了总提示这个:error C2664: 'poe' : cannot convert parameter 3 from 'int (int,int)' to 'int (__cdecl *)(void)'
哪位大佬可以解释为什么,怎么解决???

把标点符号改了就可以啦,细心点
1