标题:指向函数的指针变量问题
只看楼主
zjk103
Rank: 2
等 级:论坛游民
帖 子:22
专家分:60
注 册:2011-5-13
结帖率:100%
已结贴  问题点数:20 回复次数:7 
指向函数的指针变量问题
程序准备实现的是对于a和b两个变量,第一次调用process时找出a、b中的最大值:第二次找出最小值,第三次求a、b之和。
#include<stdio.h>
typedef int (*Func)(int, int);
void process(int x,int y,Func f)
{
    int result;
    result=f(x,y);
    printf("%d\n",result);
}
void main()
{
    int max(int,int),min(int,int),sum(int,int);
    int a,b;
    printf("please input a and b");
    scanf("%d%d\n",&a,&b);
    printf("the number a and b :%d,%d",a,b);
    printf("max is: %d");
    process(a,b,max);
    printf("min is: %d");
    process(a,b,min);
    printf("sum is: %d");
    process(a,b,sum);
}
max(int x,int y)
{
    int z;
    z=x>y?x:y;
    return z;
}
min(int x,int y)
{
    int z;
    z=x<y?x:y;
    return z;
}
sum(int x,int y)
{
    int z;
    z=x+y;
    return z;
}
在VC6.0上编译一直出错,说process中的参数过多。。。。求大牛指导。。。
这是编译时提示的错误:
--------------------Configuration: 函数指针 - Win32 Debug--------------------
Compiling...
函数指针.cpp
E:\新建文件夹\函数指针\函数指针.cpp(18) : error C2660: 'process' : function does not take 3 parameters
E:\新建文件夹\函数指针\函数指针.cpp(20) : error C2660: 'process' : function does not take 3 parameters
E:\新建文件夹\函数指针\函数指针.cpp(22) : error C2660: 'process' : function does not take 3 parameters
Error executing cl.exe.

函数指针.obj - 3 error(s), 0 warning(s)

[ 本帖最后由 zjk103 于 2011-9-23 17:26 编辑 ]
搜索更多相关主题的帖子: include process please number result 
2011-09-23 16:31
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
得分:5 
小问题挺多,你自己看吧
#include<stdio.h>
void process(int x,int y,int(*mos)(int,int))
{
    int result;
    result=(*mos)(x,y);
    printf("%d\n",result);
}
void main()
{
    int max(int,int),min(int,int),sum(int,int);
    int a=2,b=6;
    printf("please input a and b\n");
    scanf("%d%d",&a,&b);
    printf("the number a and b :%d,%d\n",a,b);
    printf("max is:");
    process(a,b,max);
    printf("min is:");
    process(a,b,min);
    printf("sum is:");
    process(a,b,sum);
}
int max(int x,int y)
{
    int z;
    z=x>y?x:y;
    return z;
}
int min(int x,int y)
{
    int z;
    z=x<y?x:y;
    return z;
}
int sum(int x,int y)
{
    int z;
    z=x+y;
    return z;
}
2011-09-23 16:45
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
得分:0 
程序代码:
#include<stdio.h>

typedef int (*Func)(int, int);

void process(int x,int y, Func f)
{
    int result;
    result=f(x, y);
    printf("%d\n",result);
}

int main()
{
    int max(int, int);
    int min(int, int);
    int sum(int, int);

    int a=2,b=6;
    printf("please input a and b:\n");
    scanf("%d%d",&a,&b);
    printf("the number a and b :%d,%d\n",a,b);
    printf("max is: ");
    process(a,b,max);
    printf("min is: ");
    process(a,b,min);
    printf("sum is: ");
    process(a,b,sum);

    return 0;
}

int max(int x,int y)
{
    int z;
    z=x>y?x:y;
    return z;
}
int min(int x,int y)
{
    int z;
    z=x<y?x:y;
    return z;
}
int sum(int x,int y)
{
    int z;
    z=x+y;
    return z;
}


C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-09-23 16:53
zjk103
Rank: 2
等 级:论坛游民
帖 子:22
专家分:60
注 册:2011-5-13
得分:0 
额,  int max(int, int);
    int min(int, int);
    int sum(int, int);这几个在声明时()内不写类型也应该可以吧
2011-09-23 16:57
zjk103
Rank: 2
等 级:论坛游民
帖 子:22
专家分:60
注 册:2011-5-13
得分:0 
回复 3楼 tisyang
那个return 0;是不是为了结束程序啊,如果那样不写应该效果是一样的吧?求大牛讲解。。。
2011-09-23 16:58
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
得分:15 
函数声明必须要完整的函数类型, 包括函数名(符号),参数个数和每个参数类型,返回值类型。具体形参名称可以省略。

main 函数的标准形式是 int main() 或者 int main(int, char **)
其他的形式虽然可能被编译器支持,但是是不符合标准的。

return 0; 目的是向操作系统报告 main 函数的返回值,一般约定返回 0表示 main 函数正结束。

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-09-23 17:10
zjk103
Rank: 2
等 级:论坛游民
帖 子:22
专家分:60
注 册:2011-5-13
得分:0 
回复 6楼 tisyang
谢谢大牛解释,不过我把typedef int (*Func)(int, int);

void process(int x,int y, Func f)   和result=f(x, y);都改过来了,函数声明也补充完整了,但是提示的错误依旧。。。
2011-09-23 17:21
zjk103
Rank: 2
等 级:论坛游民
帖 子:22
专家分:60
注 册:2011-5-13
得分:0 
编译没错误了不过程序运行时还有些毛病,我输入两个数字时会出错,中间必须加逗号才可以,而且貌似必须加全拼的
2011-09-23 17:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-350683-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043142 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved