鱼C论坛

 找回密码
 立即注册
查看: 1394|回复: 22

[已解决]函数指针的学习,帮解决一下,为什么会出现下面的错误

[复制链接]
发表于 2020-10-24 10:21:46 | 显示全部楼层 |阅读模式

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

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

x
//指针指向函数

#include <stdio.h>

int fun(int a,int b)
{
        int max;
        if(a<b)
        {
                max=b;
        }
        else
        {
                max=a;
        }
        return max;
}

main()
{
        int (*p)();
        p=fun;
        printf("请输入两个数字a、b:\n");
        int n1,n2,c;
        scanf("%d%d",&n1,&n2);
        c=(*p)(n1,n2);
        printf("较大值是:%d",c);
}

错误:
22        3        F:\C语言\c程序\eeee4.cpp        [Error] invalid conversion from 'int (*)(int, int)' to 'int (*)()' [-fpermissive]
26        14        F:\C语言\c程序\eeee4.cpp        [Error] too many arguments to function
最佳答案
2020-10-24 10:56:53
楼上 瞎说。。。
保存信息很明显了,你的函数指针的类型不对

main写成这样就好了
main()
{
        int (*p)(int,int);
        p=fun;
        printf("请输入两个数字a、b:\n");
        int n1,n2,c;
        scanf("%d%d",&n1,&n2);
        c=p(n1,n2);
        printf("较大值是:%d",c);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-24 10:30:36 | 显示全部楼层
将 eeee.cpp 直接改为 eeee.c 就运行正常了,如果你非要C++程序,我没学,飘过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2020-10-24 10:38:03 | 显示全部楼层
风过无痕1989 发表于 2020-10-24 10:30
将 eeee.cpp 直接改为 eeee.c 就运行正常了,如果你非要C++程序,我没学,飘过

我是在devc++上运行的,应该是我没有该.c,我试一下,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 10:39:55 | 显示全部楼层
my—_daboss 发表于 2020-10-24 10:38
我是在devc++上运行的,应该是我没有该.c,我试一下,谢谢


你自己去看看,错误提示明明是 eeee.cpp 呀

错误:
22        3        F:\C语言\c程序\eeee4.cpp        [Error] invalid conversion from 'int (*)(int, int)' to 'int (*)()' [-fpermissive]
26        14        F:\C语言\c程序\eeee4.cpp        [Error] too many arguments to function
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 10:56:53 | 显示全部楼层    本楼为最佳答案   
楼上 瞎说。。。
保存信息很明显了,你的函数指针的类型不对

main写成这样就好了
main()
{
        int (*p)(int,int);
        p=fun;
        printf("请输入两个数字a、b:\n");
        int n1,n2,c;
        scanf("%d%d",&n1,&n2);
        c=p(n1,n2);
        printf("较大值是:%d",c);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:03:54 | 显示全部楼层
shooan 发表于 2020-10-24 10:56
楼上 瞎说。。。
保存信息很明显了,你的函数指针的类型不对

1、你是不是用的DEV?
2、你有没有运行过程序?

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

使用道具 举报

发表于 2020-10-24 11:09:53 | 显示全部楼层
shooan 发表于 2020-10-24 10:56
楼上 瞎说。。。
保存信息很明显了,你的函数指针的类型不对

看清楚了,是我瞎,还是你瞎

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

使用道具 举报

 楼主| 发表于 2020-10-24 11:12:21 | 显示全部楼层
风过无痕1989 发表于 2020-10-24 11:03
1、你是不是用的DEV?
2、你有没有运行过程序?

应该是编译器的问题,之前遇到过同样的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:12:33 | 显示全部楼层
风过无痕1989 发表于 2020-10-24 11:03
1、你是不是用的DEV?
2、你有没有运行过程序?

1: 我用的不是dev,我用的是gcc,因为一开始我把代码放到 .c 文件里面了
2: 我当然运行过了。

3: 就算改成.cpp 后缀的也是可以运行的。只不过换成了 g++ 编译器而已。

题主的这个第二个错误明显就是 说 给了太多参数给 p这个东西,因为 p 是一个指向一个函数,函数接收(void)然后,返回int。

错误:
22        3        F:\C语言\c程序\eeee4.cpp        [Error] invalid conversion from 'int (*)(int, int)' to 'int (*)()' [-fpermissive]
26        14        F:\C语言\c程序\eeee4.cpp        [Error] too many arguments to function
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 11:13:46 | 显示全部楼层
风过无痕1989 发表于 2020-10-24 11:03
1、你是不是用的DEV?
2、你有没有运行过程序?

你用的这个编译c的是什么软件,我下载安装一下,不然经常会出现这样的小毛病
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:14:33 | 显示全部楼层
shooan 发表于 2020-10-24 11:12
1: 我用的不是dev,我用的是gcc,因为一开始我把代码放到 .c 文件里面了
2: 我当然运行过了。

你用的编译器与别人的不一样,就不要胡乱说别人瞎说,做人还是低调一点好,知道吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 11:16:01 | 显示全部楼层
shooan 发表于 2020-10-24 10:56
楼上 瞎说。。。
保存信息很明显了,你的函数指针的类型不对

恩,是这样改的,但这不是c程序了吧,c编译的应该是 int (*p)();我查书籍也是,int(*p)(int ,int)可能是c++的格式。谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:16:54 | 显示全部楼层
风过无痕1989 发表于 2020-10-24 11:14
你用的编译器与别人的不一样,就不要胡乱说别人瞎说,做人还是低调一点好,知道吗?

我说的是你瞎说,和文件后缀根本没关系,是指针的类型不对。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:17:32 | 显示全部楼层
my—_daboss 发表于 2020-10-24 11:13
你用的这个编译c的是什么软件,我下载安装一下,不然经常会出现这样的小毛病

DEV_C++5.11,编译器是4.9.9.2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:17:52 | 显示全部楼层
风过无痕1989 发表于 2020-10-24 11:09
看清楚了,是我瞎,还是你瞎

这张图片不就说明了我说的话吗,p的类型不对。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:20:36 | 显示全部楼层
my—_daboss 发表于 2020-10-24 11:16
恩,是这样改的,但这不是c程序了吧,c编译的应该是 int (*p)();我查书籍也是,int(*p)(int ,int)可 ...

不是的c++的写法。
int (*p)(); 表示的是 p是一个指针,指向函数,函数没有参数列表,返回int
int(*p)(int ,int) 表示的是 p是一个指针,指向函数,函数接收两个int,返回int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 11:20:56 | 显示全部楼层
shooan 发表于 2020-10-24 11:17
这张图片不就说明了我说的话吗,p的类型不对。

两位都没错,我用你们的办法都运行出来了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 11:21:46 | 显示全部楼层
风过无痕1989 发表于 2020-10-24 11:17
DEV_C++5.11,编译器是4.9.9.2

两位都没错,我用你们的办法都运行出来了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:28:17 | 显示全部楼层
my—_daboss 发表于 2020-10-24 11:16
恩,是这样改的,但这不是c程序了吧,c编译的应该是 int (*p)();我查书籍也是,int(*p)(int ,int)可 ...

你看的书可能写的比较随便,因为 一般的情况 main 都会写成
int main(void)
{
        return 0;
}

这样的形式,如果有参数的话,会写成这样的
int main(int argc, char**argv)
{
        return 0;
}

题目中的
main() {
}

这样的写法都是不正规的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 11:34:18 | 显示全部楼层
shooan 发表于 2020-10-24 11:17
这张图片不就说明了我说的话吗,p的类型不对。

我说“在C语言编译器下运行正常,在C++编译器下运行不正常”是瞎说吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 20:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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