欣欣celin 发表于 2014-4-23 22:45:50

关函数指针,.....运行时报错了,咋整??

本帖最后由 欣欣celin 于 2014-4-25 22:00 编辑

/******
设一个函数PROCESS,在调用它的时候,每次实现不同的功能
输入A和B,第一次调用PROCESS时找出大的,
第二次找出小的,第三次求和
********/
#include <stdio.h>
void main()
{
    int max(int, int);
    int min(int, int);
    int add(int, int);

    void process(int x, int y, int(*fun)());

    int a, b;
    printf("enter a and b: ");
    scanf("%d %d", &a, &b);

    printf("max = ");
    process(a, b, max);

    printf("min = ");
    process(a, b, min);

    printf("sum = ");
    process(a, b, add);
}
int max(int x, int y)
{
    int z;

    if(x > y)
    {
      z = x;
    }
    else
    {
      z = y;
    }
    return z;
}
int min(int x, int y)
{
    int n = x;
    if( x>y )
    {
      n = y;
    }
    return n;
}
int add(int x, int y)
{
    int sum;
    sum = x + y;
    return sum;
}

以上程式不知咋嘀,编译没错,运行报错如下,咋整??
各路大神请赐教,十分感谢{:7_154:}
--------------------Configuration: process - Win32 Debug--------------------
Linking...
process.obj : error LNK2001: unresolved external symbol _process
Debug/process.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

process.exe - 1 error(s), 0 warning(s)


machimilk 发表于 2014-4-23 22:45:51

有几个错误 给你修改了一下
#include <stdio.h>




intmain()
{
        int Max(int,int);//声明计算函数的形参类型
        int Min(int,int);//声明计算函数的形参类型
        int Add(int,int);//声明计算函数的形参类型
        void process( int x, int y, int(fun)(int,int));//声明过程函数的形参类型

        int a, b;
        printf("enter a and b: ");
        scanf("%d %d", &a, &b);//接收输入到变量a b

        printf("max = ");
        process(a, b, Max);//传递输入的参数a,b,和Max函数地址(函数名就是函数地址),注意你原来的max是小写的和系统本身的冲突了

        printf("min = ");
        process(a, b, Min);

        printf("sum = ");
        process(a, b, Add);
        system("pause");
        return 0;
}
int Max(int x, int y)
{
        int z;
        if(x > y)
        {
                z = x;
        }
        else
        {
                z = y;
        }
        return z;
}
int Min(int x, int y)
{
        int n = x;
        if( x>y )
        {
                n = y;
        }else
        {
                n=x;
        }
        return n;
}
int Add(int x, int y)
{
        int sum;
        sum = x + y;
        return sum;
}
void process(int x, int y, int(fun)(int,int))
{
        int Ret;
        Ret = fun(x,y);//取出函数地址和函数参数并计算,结果保存到Ret
        printf("%d\n", Ret);//打印结果
}

aicode 发表于 2014-4-24 11:36:13

学习了,写的真好!!!

仰望天上的光 发表于 2014-4-24 12:01:30

/******
设一个函数PROCESS,在调用它的时候,每次实现不同的功能
输入A和B,第一次调用PROCESS时找出大的,
第二次找出小的,第三次求和
********/
#include <stdio.h>
void main()
{
   int max(int, int);
   int min(int, int);
   int add(int, int);

    void process(int x, int y, int(*fun)());

    int a, b;
   printf("enter a and b: ");
   scanf("%d %d", &a, &b);

    printf("max = ");
   process(a, b, max);

    printf("min = ");
   process(a, b, min);

    printf("sum = ");
   process(a, b, add);
}
int max(int x, int y)
{
   int z;

    if(x > y)
   {
         z = x;
   }
   else
   {
         z = y;
   }
   return z;
}
int min(int x, int y)
{
   int n = x;
   if( x>y )
   {
         n = y;
   }
   return n;
}
int add(int x, int y)
{
   int sum;
   sum = x + y;
   return sum;
}

//加上这个行数定义
void process(int x, int y, int(*fun)())
{
       printf("%d\n",((int(*)(int,int))fun)(x,y));
}

qq小小七 发表于 2014-4-25 16:11:31

你的process函数呢?

15201315716 发表于 2014-4-25 16:53:34

你都要return,怎么能用void main呢要用int main!

欣欣celin 发表于 2014-4-25 22:09:36

15201315716 发表于 2014-4-25 16:53 static/image/common/back.gif
你都要return,怎么能用void main呢要用int main!

好吧,不过经过以上大神们修改,VOID MAIN也运行无误哦{:7_148:}

欣欣celin 发表于 2014-4-25 22:11:55

qq小小七 发表于 2014-4-25 16:11 static/image/common/back.gif
你的process函数呢?

在没看到以上大神们的指点之前,偶还不会写PROCESS的内容{:7_181:}
只是总觉得少了点什么{:7_166:},所以发贴求救咯

欣欣celin 发表于 2014-4-25 22:16:21

仰望天上的光 发表于 2014-4-24 12:01 static/image/common/back.gif


感谢大神指点,终于明白了,{:7_149:}
不过,很抱歉,事关在您出手之前,有machimilk大神已提供了正解,道义上得优先最佳TA的{:7_174:}

欣欣celin 发表于 2014-4-25 22:27:42

仰望天上的光 发表于 2014-4-24 12:01 static/image/common/back.gif


感谢大神指点,终于明白了,{:7_149:}不过,很抱歉,在您出手之前,有machimilk大神已提供了正解,
道义上得优最佳TA的{:7_174:}偶知道您不会介意的呵


欣欣celin 发表于 2014-4-25 22:34:41

machimilk 发表于 2014-4-23 22:45 static/image/common/back.gif
有几个错误 给你修改了一下

感谢大神指点,又学习了{:7_172:}
不过,以下有异意请看“//....”
int Min(int x, int y)
{
      int n = x;      //初始赋值,n=x,假设x最小,
      if( x>y )
      {
                n = y;
      }else      //整个else省略也可以正确运行哦{:5_109:}
      {
                n=x;
      }
      return n;
}

machimilk 发表于 2014-4-25 23:08:10

本帖最后由 machimilk 于 2014-4-25 23:10 编辑

欣欣celin 发表于 2014-4-25 22:34 static/image/common/back.gif
感谢大神指点,又学习了
不过,以下有异意请看“//....”
int Min(int x, int y)


其实我们这么写都有bug,试想输入2个一样的值,会返回什么,当然我们暂时不考虑2个一样的值,你初始的n等于x 如果y比x小就返回y这样可以省略x的,你注释的else是可以省略的,如果你还想更省也可以这样写
int Max(int x, int y)
{
        return x>y?x:y;
}
int Min(int x, int y)
{
        return x<y?x:y;
}
void main()这样写在vc windows下没问题,但是在其他操作系统下面就会产生错误,为了保持良好的习惯还是用 int main吧

欣欣celin 发表于 2014-4-26 18:37:17

machimilk 发表于 2014-4-25 23:08 static/image/common/back.gif
其实我们这么写都有bug,试想输入2个一样的值,会返回什么,当然我们暂时不考虑2个一样的值,你初始的n ...

原来如此,学问真是挖出来的呀,谢谢哦{:7_148:}:handshake

云计算 发表于 2014-4-28 16:04:59

C++数组 学号 成绩{{“01”,81},{“02”,65},{“03”,79},{“04”,65}},怎么 排列啊?按升幂降幂都行,学号 也一定跟着出来, 我自己只能实现成绩 排序, 实现不了 字符型数组学号的排列, :sweat:

欣欣celin 发表于 2014-4-28 23:06:24

云计算 发表于 2014-4-28 16:04 static/image/common/back.gif
C++数组 学号 成绩{{“01”,81},{“02”,65},{“03”,79},{“04”,65}},怎么 排列啊?按升幂降幂都 ...

哥们,偶还很菜,刚学C,还没学过C++和其它语言,这个问题我去帮你悬赏,找救兵吧,{:7_168:}

欣欣celin 发表于 2014-4-28 23:12:37

欣欣celin 发表于 2014-4-28 23:06 static/image/common/back.gif
哥们,偶还很菜,刚学C,还没学过C++和其它语言,这个问题我去帮你悬赏,找救兵吧,

已悬赏如下,过两天去看看是否有解答吧{:7_168:}
http://bbs.fishc.com/forum.php?mod=viewthread&tid=46483&extra=

jonng 发表于 2014-4-28 23:57:28

你只是没有把自己定义的函数声明,所以main不认识,你只要把自己定义的函数放到main前面就不会出错了

云计算 发表于 2014-4-29 21:50:45

欣欣celin 发表于 2014-4-28 23:12 static/image/common/back.gif
已悬赏如下,过两天去看看是否有解答吧
http://bbs.fishc.com/forum.php?mod=viewthread&tid=4 ...

兄弟我级别低 无权限访问啊我Q 767921536

欣欣celin 发表于 2014-4-29 22:00:09

云计算 发表于 2014-4-29 21:50 static/image/common/back.gif
兄弟我级别低 无权限访问啊我Q 767921536

哥们,偶不用Q好久了,自从被盗后,就没再用了,

要不你试试这么干,
http://fishc.com/dvd/vip.html

要不,有答案之后再转贴到这,给你看,好不?

云计算 发表于 2014-5-1 14:22:51

欣欣celin 发表于 2014-4-29 22:00 static/image/common/back.gif
哥们,偶不用Q好久了,自从被盗后,就没再用了,

要不你试试这么干,


我论坛也加不了你好友要不你加下我~
页: [1] 2
查看完整版本: 关函数指针,.....运行时报错了,咋整??