鱼C论坛

 找回密码
 立即注册
查看: 2550|回复: 6

请教一下这个C程序

[复制链接]
发表于 2012-5-17 08:26:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
void main()
{
        int max(int,int);
        int min(int,int);              
        int add(int,int);              
        void process(int,int,int(*fun)(int,int));//这里不懂,int(*fun)(int,int)
        int a,b;
        printf("enter a and b:");
                scanf("%d%d",&a,&b);
        printf("max=");
                process(a,b,max);//这里不懂,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,int)) //这个函数的作用
{
        int result;
        result=(*fun)(x,y);
        printf("%d\n",result);
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-17 08:44:47 | 显示全部楼层
第一个是用指针指向了函数,返回一个整型的函数,函数的嵌套;第二个,max是函数,更确切地说是函数的返回值。至于第三个问题,还是留给楼主摸头脑自己想吧,调试一下就知道你所问的那个函数的作用了。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-22 08:22:02 | 显示全部楼层
你是想用C来告诉别人,我们结构化的C,也能实现封装吗?亲~

你这是何苦呢....呵呵   你动机不纯,不予解答。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-22 09:54:28 | 显示全部楼层
本帖最后由 楚门 于 2012-5-22 10:38 编辑
  1. void process(int,int,int(*fun)(int,int));
复制代码
这里fun是函数process的形式参数,fun是一个指向函数(该函数式具有两个int参数,一个int返回值)的指针,
  1. process(a,b,max);
复制代码
这里很显然调用process函数,那么max就被当做一个指针(指向函数的指针)传递给process,这说明函数名可以被看做指向该函数的指针,那么我们就可以通过指向函数的指针来调用函数,于是就有了一个很纠结的问题,请看下面
  1. void Tou (char *) ; //声明一个函数
  2. void (*pf) (char *) ; //定义一个指向函数的指针
  3. char  mis[] = "hello" ;
  4. pf = Tou ;//让该指针指向所声明的函数
  5. (*pf) (mis) ;//调用Tou函数
  6. pf (mis) ;//同上
复制代码
纠结哪里呢?看最后两句,第一种:因为pf指向Tou函数,所以*pf就是Tou函数,因此(*pf) (mis)同Tou (mis)一样,第二种:因为函数名是一个指针,所以可以互换的使用函数名和指针,因此pf (mis)同Tou (mis)等价。
历史上贝尔实验室的C和UNIX的开发者采用第一种观点,Berkeley的UNIX的扩展者采用第二种观点,K&R C不允许第二种形式,ANSI C吧二者作为等价形式接受。
嘻嘻,给个好评吧!!

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-22 10:49:21 | 显示全部楼层

这个解释还是比较精彩的
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-22 15:17:18 | 显示全部楼层
呵呵,学习了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-22 15:43:35 | 显示全部楼层
void  process(int x, int y, int (*fun)(int,int)) 这个函数有3个参数,最后一个是函数指针,函数指针是指向函数的指针变量。参数本身首先应是指针变量,他指向一个函数的入口地址,通过找到这个地址来执行函数里面的内容。每一个函数的数名称是这个函数入口地址,process(a,b,max)里的max是函数名。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-4 08:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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