m0_58203183 2022-05-03 14:28 采纳率: 85.7%
浏览 12
已结题

函数指针,求为什么process函数里的if语句没有逐个判定而是直接打印

#include <stdio.h>

void main()
{

int max(int ,int );
int min(int ,int );
int add(int, int );
void process(int  ,int  ,int(*p)());
int a,b;
printf("enter two numbers:");
scanf("%d%d",&a,&b);

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

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

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

}
int max(int a,int b)
{
int c;
if(a>b)
{
c=a;
}
else
{
c=b;
}
return c;
}

int min(int a,int b)
{
int c;
if(a>b)
{
c=b;
}
else
{
c=a;
}
return c;
}

int add(int a,int b)
{
int c;
c=a+b;
return c;
}
#if(1)
void process(int a,int b,int (*p)(a,b))
{

int c;

    if(p=max)
    {
        c=(*p)(a,b);
        printf("%d",c);
    }        
else    if(p=min)
    {
        c=(*p)(a,b);
        printf("%d",c);
    }
else    if(p=add)
    {
        c=(*p)(a,b);
        printf("%d",c);
    }

}
#endif

img

  • 写回答

1条回答 默认 最新

  • 柒号华仔 2022年度博客之星评选前沿技术领域TOP 1 2022-05-03 14:46
    关注

    答案:if(p=max)改为if(p == max)
    else if(p=min)改为else if(p == min)
    else if(p=add)改为else if(p=add)
    原因:if(p=max)中,p=max 实际是将p赋值为max,那么if(p =max)就相当于if(p),此时p=6是大于0的,if判断条件为真,会直接往下进行printf打印。后面两句else if情况也是如此。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月11日
  • 已采纳回答 5月3日
  • 创建了问题 5月3日

悬赏问题

  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,