QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 687|回复: 2

指针方面的问题!:)谢谢兄弟们赐教!:)

[复制链接]
发表于 2004-12-31 10:11:40 | 显示全部楼层 |阅读模式
[code:1]/*用指向函数的指针作函数参数。
    原理如下:
    有一个函数,假设其函数名为sub,它有两个形参,(x1和x2),定义x1和x2为指向函数的函数指针变量 ,在调用函数sub时,
    实参用两个函数名f1和f2个形参传送函数地址,这样在sub函数中就可以调用f1和f2这两个函数了。
    真如1051.c中注意的(3)中所说,在调用sub函数时,要调用的函数不是固定的,这次调用f1和f2,而下次要调用f3和f4,
    第三次要调用f5和f6,这时用指针变量就比较方便了,只要在每次调用sub函数时给出不同的函数名作为实参即可,sub函数
    不需要作任何修改。
    现在通过一个简单的例子来说明这种方法的应用*/
/*设一个函数process,在调用它的时候,每次实现不同的功能。输入a和b两个数,第一次调用process是找出a和b中最大者,
    第二次找出其中最小者,第三次求出a与b之和.*/
main()
{
      int max(int,int);
      int min(int,int);
      int add(int,int);
      int (*fun)();
      int a,b;
      printf("情输入a和b两个数:");
      scanf("%d%d",&a,&b);
      printf("max= ");
      process(a,b,max);
      printf("min= ");
      process(a,b,min);
      printf("sum= ");
      process(a,b,add);
}
max(int x,int y)
{
      int z;
      if(x>y)
            z=x;
      else if(x<y)
            z=y;
      return(z);
}
min(int x,int y)
{
      int z;
      if(x<y)
            z=x;
      else if(x>y)
            z=y;
      return(z);
}
add(int x,int y)
{
      int z;
      z=x+y;
      return(z);
}
void process(int x,int y,(*fun)(int x,int y))
{
      int result;
      result=(*fun)(x,y);
      printf("%d\n",result);
}[/code:1]
我编译时总是有错误,如下:
[code:1]
fydream@linux:~/yuanma/unit 10/lijie/part 5> gcc -ggdb3 -o fydream 1052.c
1052.c:51: error: parse error before '(' token
1052.c:51: error: parse error before ')' token
1052.c:54: error: `fun' undeclared here (not in a function)
1052.c:54: error: `x' undeclared here (not in a function)
1052.c:54: error: `y' undeclared here (not in a function)
1052.c:54: warning: data definition has no type or storage class
1052.c:55: error: parse error before string constant
1052.c:55: warning: conflicting types for built-in function `printf'
1052.c:55: warning: data definition has no type or storage class
[/code:1]
我仔细找乐半天呀,可是我觉得因该没有错误呀?这时谭老先生的那本教材上的。严重感谢!
发表于 2004-12-31 14:36:06 | 显示全部楼层
[code:1]
#include <stdio.h>
void process(int,int,int (*)(int,int));
main()
{
      int max(int,int);
      int min(int,int);
      int add(int,int);
//      int (*fun)();
      int a,b;
      printf("情输入a和b两个数:");
      scanf("%d%d",&a,&b);
      printf("max= ");
      process(a,b,max);
      printf("min= ");
      process(a,b,min);
      printf("sum= ");
      process(a,b,add);
}
max(int x,int y)
{
      int z;
      if(x>y)
            z=x;
      else if(x<y)
            z=y;
      return(z);
}
min(int x,int y)
{
      int z;
      if(x<y)
            z=x;
      else if(x>y)
            z=y;
      return(z);
}
add(int x,int y)
{
      int z;
      z=x+y;
      return(z);
}
void process(int x,int y,int (*fun)(int x,int y))
{
      int result;
      result=(*fun)(x,y);
      printf("%d\n",result);
}
[/code:1]
回复

使用道具 举报

发表于 2005-1-4 10:08:08 | 显示全部楼层
yes, the definition of the parameter <function pointer problem>  of function process caused this problem.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 19:29 , Processed in 0.047667 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表