函数指针的学习,帮解决一下,为什么会出现下面的错误
//指针指向函数#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 invalid conversion from 'int (*)(int, int)' to 'int (*)()' [-fpermissive]
26 14 F:\C语言\c程序\eeee4.cpp too many arguments to function
将 eeee.cpp 直接改为 eeee.c 就运行正常了,如果你非要C++程序,我没学,飘过 风过无痕1989 发表于 2020-10-24 10:30
将 eeee.cpp 直接改为 eeee.c 就运行正常了,如果你非要C++程序,我没学,飘过
我是在devc++上运行的,应该是我没有该.c,我试一下,谢谢 my—_daboss 发表于 2020-10-24 10:38
我是在devc++上运行的,应该是我没有该.c,我试一下,谢谢
你自己去看看,错误提示明明是 eeee.cpp 呀
错误:
22 3 F:\C语言\c程序\eeee4.cpp invalid conversion from 'int (*)(int, int)' to 'int (*)()' [-fpermissive]
26 14 F:\C语言\c程序\eeee4.cpp too many arguments to function 楼上 瞎说。。。
保存信息很明显了,你的函数指针的类型不对
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);
} shooan 发表于 2020-10-24 10:56
楼上 瞎说。。。
保存信息很明显了,你的函数指针的类型不对
1、你是不是用的DEV?
2、你有没有运行过程序?
shooan 发表于 2020-10-24 10:56
楼上 瞎说。。。
保存信息很明显了,你的函数指针的类型不对
看清楚了,是我瞎,还是你瞎
风过无痕1989 发表于 2020-10-24 11:03
1、你是不是用的DEV?
2、你有没有运行过程序?
应该是编译器的问题,之前遇到过同样的问题 风过无痕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 invalid conversion from 'int (*)(int, int)' to 'int (*)()' [-fpermissive]
26 14 F:\C语言\c程序\eeee4.cpp too many arguments to function 风过无痕1989 发表于 2020-10-24 11:03
1、你是不是用的DEV?
2、你有没有运行过程序?
你用的这个编译c的是什么软件,我下载安装一下,不然经常会出现这样的小毛病 shooan 发表于 2020-10-24 11:12
1: 我用的不是dev,我用的是gcc,因为一开始我把代码放到 .c 文件里面了
2: 我当然运行过了。
你用的编译器与别人的不一样,就不要胡乱说别人瞎说,做人还是低调一点好,知道吗? shooan 发表于 2020-10-24 10:56
楼上 瞎说。。。
保存信息很明显了,你的函数指针的类型不对
恩,是这样改的,但这不是c程序了吧,c编译的应该是 int (*p)();我查书籍也是,int(*p)(int ,int)可能是c++的格式。谢谢{:5_106:} 风过无痕1989 发表于 2020-10-24 11:14
你用的编译器与别人的不一样,就不要胡乱说别人瞎说,做人还是低调一点好,知道吗?
我说的是你瞎说,和文件后缀根本没关系,是指针的类型不对。 my—_daboss 发表于 2020-10-24 11:13
你用的这个编译c的是什么软件,我下载安装一下,不然经常会出现这样的小毛病
DEV_C++5.11,编译器是4.9.9.2 风过无痕1989 发表于 2020-10-24 11:09
看清楚了,是我瞎,还是你瞎
这张图片不就说明了我说的话吗,p的类型不对。 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 shooan 发表于 2020-10-24 11:17
这张图片不就说明了我说的话吗,p的类型不对。
两位都没错,我用你们的办法都运行出来了。 风过无痕1989 发表于 2020-10-24 11:17
DEV_C++5.11,编译器是4.9.9.2
两位都没错,我用你们的办法都运行出来了。 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() {
}
这样的写法都是不正规的。 shooan 发表于 2020-10-24 11:17
这张图片不就说明了我说的话吗,p的类型不对。
我说“在C语言编译器下运行正常,在C++编译器下运行不正常”是瞎说吗?
页:
[1]
2