标题:函数指针void process(int x,int y,int(*fun)(int,int ) )和void process(i ...
取消只看楼主
原以为
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2015-10-15
结帖率:60%
已结贴  问题点数:10 回复次数:3 
函数指针void process(int x,int y,int(*fun)(int,int ) )和void process(int x,int y,int(
程序代码:
/*函数指针(此程序可正常运行)*/
#include<stdio.h>                                
int max(int x,int y);                                //函数声明
int min(int x,int y);                                //函数声明
int add(int w,int z);                                //函数声明
void process(int x,int y,int(*fun)(int,int ) );       //函数声明 
/*(当把这句语句改成void process(int x,int y,int(*fun)( ) );后面函数定义时作相应修改)编译时程序错误,为什么?*/

void main()
{
    int a,b;
    printf("请输入两个数字:");
    scanf("%d %d",&a,&b);
    
    
    process(a,b, max);
    process(a,b, min);
    process(a,b, add);
}

int max(int x,int y)
{    
    int  w;
    
    w=x>y?x:y;
    return w;
} 
int min(int x,int y)
{    
    int  w;
    
    w=x<y?x:y;
    return w;
} 
int add(int w,int z)
{
          int x;
          x=w+z;
          return x;
}
void process(int x,int y,int (*fun)(int,int))
{
          int result;
          result=(*fun)(x,y);
          printf("%d\n", result);
          
          
}
搜索更多相关主题的帖子: process 
2015-11-19 13:51
原以为
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2015-10-15
得分:0 
回复 楼主 原以为
程序代码:
/*        为何这个程序可以正常运行                         */


/***********************************************************/
/*  设一个函数process,在调用它的时候,每次实现不同的功能。*/
/*  输入a和b两个数,第一次调用process时找出a和b中大者,*/
/*  第二次找出其中小者,第三次求a与b之和。               */
#include <stdio.h>
      int max(int x, int y);            /* 函数声明 */
      int min(int x, int y);            /* 函数声明 */
      int add(int x, int y);            /* 函数声明 */  
      void process( int x, int y, int(*fun)() );    /* 函数声明 */
      

void main()
{
     
      int a, b;

      printf("Endter 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 z;

      if( x < y )
      {
            z = x;
      }
      else
      {
            z = y;
      }

      return z;
}

int add(int x, int y)
{
      int z;
      
      z = x + y;
      return z;
}


 void process( int x, int y, int(*fun)() )    /* 函数定义 */ 
{
      int result;
     result = (*fun)(x, y);
     printf("%d\n", result);

 }


[此贴子已经被作者于2015-11-19 13:57编辑过]

2015-11-19 13:54
原以为
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2015-10-15
得分:0 
回复 3楼 hellovfp
你运行一下第二个程序,虽然是
 void process( int x, int y, int(*fun)() );
   
却能运算出正确结果。
2015-11-19 15:39
原以为
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2015-10-15
得分:0 
回复 3楼 hellovfp
/*函数指针*/
#include<stdio.h>                                
int max(int x,int y);                                //函数声明
int min(int x,int y);                                //函数声明
int add(int w,int z);                                //函数声明
void process(int x,int y,int(*fun)() );       //函数声明
void main()
{
    int a,b;
    printf("请输入两个数字:");
    scanf("%d %d",&a,&b);
   
   
    process(a,b, max);
    process(a,b, min);
    process(a,b, add);
}

int max(int x,int y)
{   
    int  w;
   
    w=x>y?x:y;
    return w;
}
int min(int x,int y)
{   
    int  w;
   
    w=x<y?x:y;
    return w;
}
int add(int w,int z)
{
          int x;
          x=w+z;
          return x;
}
void process(int x,int y,int (*fun)())
{
          int result;
          result=(*fun)(x,y);
          printf("%d\n", result);
         
         
}


上面这个为何错误????













#include <stdio.h>
      int max(int x, int y);            /* 函数声明 */
      int min(int x, int y);            /* 函数声明 */
      int add(int x, int y);            /* 函数声明 */  
      void process( int x, int y, int(*fun)() );    /* 函数声明 */
      

void main()
{
     
      int a, b;

      printf("Endter 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 z;

      if( x < y )
      {
            z = x;
      }
      else
      {
            z = y;
      }

      return z;
}

int add(int x, int y)
{
      int z;
      
      z = x + y;
      return z;
}

void process( int x, int y, int(*fun)() )    /* 函数定义 */
{
      int result;
     result = (*fun)(x, y);
     printf("%d\n", result);
}


上面这个为何能运行????
2015-11-19 15:41



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




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

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