鱼C论坛

 找回密码
 立即注册
查看: 1151|回复: 8

[已解决]函数指针

[复制链接]
发表于 2020-12-21 19:22:05 | 显示全部楼层 |阅读模式

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

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

x
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. void check(char *x,char *y,int (*comp)(char *,char *))
  5.         /*第三个参数为函数指针变量*/
  6. {
  7.         if(!(*comp)(x,y))
  8.                 printf("相等\n");
  9.         else
  10.                 printf("不相等\n");
  11. }
  12. int compvalues(char *x,char *y)
  13. {
  14.         if(atoi(x)==atoi(y))
  15.                 /*atoi()将字符串类型转换成整型,需要包含头文件stdlib.h*/
  16.                 return 0;
  17.         else
  18.                 return 1;
  19. }
  20. void main()
  21. {
  22.         char a[80],b[80];
  23.         strcpy(a,"0123");
  24.         strcpy(b,"123");
  25.         printf("比较数值是否相等:\n%s与%s",a,b);
  26.         check(a,b,compvalues);
  27.         printf("比较字符串中是否相等:\n%s与%s",a,b);
  28.         check(a,b,strcmp);
  29. }
复制代码



//编写一个函数,使用函数指针变量作为参数,使其即可比较字符串是否相等,也可比较数值是否相等。
//大佬们啊,看不懂啊!!!
最佳答案
2020-12-22 18:54:28
严凯 发表于 2020-12-22 18:33
我就是不知道,他这个程序是怎么打印出相等和不相等的

比如说他check(a,b,compvalues);
ckeck里面的第三个变量传入的是函数名,其实就是compvalues函数的入口地址
然后在check函数第三个形参int (*comp)就指向这个入口地址,然后就可以使用(*comp)(x,y),
(*comp)(x,y)就和compvalues(x,y)一样的,他们都是一个代码块上的函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-21 19:54:40 | 显示全部楼层
你是什么看不懂啊,不清楚你要问什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 20:06:23 | 显示全部楼层
你这个可以运行吗/?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 20:17:23 | 显示全部楼层
int mystrcmp(char *x,char*y)
{
        int i=0;
        for(i=0;i<80;i++)
        {
                if(*x++ != *y++)
                {
                        return 1;
                }
        }
        return 0;
}
自己写一个,compvalues和strcmp,IntelliSense: "int (__cdecl *)(const char *_Str1, const char *_Str2)" 类型的实参与 "int (*)(char *, char *)" 类型的形参不兼容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 20:27:09 | 显示全部楼层
本帖最后由 小甲鱼的铁粉 于 2020-12-21 20:28 编辑

是因为你的compvalues的形参类型和strcmp函数形参类型出现了矛盾
先看strcmp函数
  1. int __cdecl strcmp(const char *_Str1,const char *_Str2);
复制代码
,他在string.h中是这样定义的,形参都时const char但是你的compvalues的形参都是char,就矛盾了
所以可以修改一下compvalues的形参,正确的如下
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. void check(char *x,char *y,int (*comp)(const char *,const char *))
  5.         /*第三个参数为函数指针变量*/
  6. {
  7.         if(!(*comp)(x,y))
  8.                 printf("相等\n");
  9.         else
  10.                 printf("不相等\n");
  11. }
  12. int compvalues(const char *x,const char *y)
  13. {
  14.         if(atoi(x)==atoi(y))
  15.                 /*atoi()将字符串类型转换成整型,需要包含头文件stdlib.h*/
  16.                 return 0;
  17.         else
  18.                 return 1;
  19. }
  20. int main()
  21. {
  22.         char a[80],b[80];
  23.         strcpy(a,"0123");
  24.         strcpy(b,"123");
  25.         printf("比较数值是否相等:\n%s与%s",a,b);
  26.         check(a,b,compvalues);
  27.         printf("比较字符串中是否相等:\n%s与%s",a,b);
  28.         check(a,b,strcmp);
  29. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-22 18:08:51 | 显示全部楼层

我这个就是有错误。strcmp会报错

评分

参与人数 1贡献 +3 收起 理由
昨非 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-22 18:17:07 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-12-21 20:27
是因为你的compvalues的形参类型和strcmp函数形参类型出现了矛盾
先看strcmp函数,他在string.h中是这样定 ...

大佬,你上面回复的我都看懂了。但是我是想问一下这个程序我怎么理解?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-22 18:33:51 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-12-21 20:27
是因为你的compvalues的形参类型和strcmp函数形参类型出现了矛盾
先看strcmp函数,他在string.h中是这样定 ...

我就是不知道,他这个程序是怎么打印出相等和不相等的

评分

参与人数 1贡献 +3 收起 理由
昨非 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-22 18:54:28 | 显示全部楼层    本楼为最佳答案   
严凯 发表于 2020-12-22 18:33
我就是不知道,他这个程序是怎么打印出相等和不相等的

比如说他check(a,b,compvalues);
ckeck里面的第三个变量传入的是函数名,其实就是compvalues函数的入口地址
然后在check函数第三个形参int (*comp)就指向这个入口地址,然后就可以使用(*comp)(x,y),
(*comp)(x,y)就和compvalues(x,y)一样的,他们都是一个代码块上的函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 18:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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