荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: [合集]请帮忙检查一下这个关于函数指针的程序。
发信站: 荔园晨风BBS站 (Thu Jun  7 20:31:39 2001), 站内信件

lvyou (∷∷天涯浪子∷∷) 于Wed May 16 13:17:17 2001提到:

  编译时显示第10行“c=(*p)(a,b);”错误,为什么?
#include<stdio.h>
int max(int x,int y);
void main()
{
        int max();
        int (*p)();
        int a,b,c;
        p=max;
        scanf("%d,%d",&a,&b);
        c=(*p)(a,b);
        printf("a=%d,b=%d,max=%d",a,b,c);
}
int max(int x,int y)
{
        int z;
        if (x>y) z=x;
        else z=y;
        return(z);
}

bstone (Gone with the wind) 于Wed May 16 13:30:59 2001提到:

no error,but the c++ complier


michaelx (我有事不在) 于Wed May 16 16:46:12 2001提到:

在vc下没问题


lvyou (∷∷天涯浪子∷∷) 于Wed May 16 22:34:03 2001提到:

  真的吗?你编译过了吗?我和bstone师兄编译了
n次都不行哦。


Begin (一穷二白) 于Wed May 16 23:23:03 2001提到:

            ~~~~~~~~~~这个应该去掉


Macro (M2) 于Thu May 17 06:58:27 2001提到:

change the follow line as:

//        int max();
        int (*p)(int,int);
                 ~~~~~~
C++ 是强类型语言,tang师兄以前解答过类似问题,我只是引用罢了!!


Second (石开) 于Thu May 17 07:06:09 2001提到:

用TC2编译没问题。答案正确。
用C++编译当然会有问题了。
                ~~~~~~C++要求函数所有的参数,
                      在函数定义和函数原型的圆括号中要声明


Macro (M2) 于Thu May 17 07:17:03 2001提到:

这是C和C++的区别吧!我想C++对类型的检查比较严格。
你在VC把它保存为*。C也可通知过!!


Second (石开) 于Thu May 17 07:30:04 2001提到:

哦,这我到没试过了,或许是个好办法。我都是用TC写C。用VC写C++的。
许多C程序移到C++上都会出问题。
大多是这里出问题。
在C中,空参数表意味参数不予检查。在C++中,意味没有任何参数。
还有的就是
C++调用函数时,如果是C写的一定要加连接说明。否则出问题较难查。



Macro (M2) 于Thu May 17 07:34:33 2001提到:

什么意思啊,给个例子看看!
thanks!!


Second (石开) 于Thu May 17 08:08:49 2001提到:

extern "c" 函数原型 //单个函数
extern "c" {函数原型} //多个函数
这些声明告诉C++指定函数不在C++中编译,不对这些函数名编码(与C++
函数重载有关,为了进行类型安全的连接,C++对函数名做专门的编码)。
我所说的函数是专用的C函数库,C++包含C标准库及其函数。不要求对标准函数
使用连接声明



cools (夢を追う) 于Thu May 17 08:19:20 2001提到:

一般来说还是尽量不要用连接好..
呵呵
真的是还要用到c编的程序的话
还是用tc或者bc 吧



lvyou (∷∷天涯浪子∷∷) 于Thu May 17 08:38:41 2001提到:

  哦!原来是这样,昨天bstone也和我说了要将"int (*p)();"
改为"int (*p)(int,int);",但他忘记了也将“int max();”改为
“int max(int,int);”。
  改后通过了,谢谢!


lvyou (∷∷天涯浪子∷∷) 于Thu May 17 08:42:15 2001提到:

  哎呀!原来将“int max();”直接删掉也行,刚才真是多此一举,
不好意思。呵呵!


michaelx (我有事不在) 于Thu May 17 10:03:17 2001提到:

骗你干什么,开始我都以为至少有几个warnning不过出乎意料,
0 errors,0 warnnings,奇怪,不会是我的vc有问题吧



bstone (Gone with the wind) 于Thu May 17 10:10:31 2001提到:

he use it as cpp


lvyou (让一切随风沉默) 于Thu May 17 10:10:57 2001提到:

  你改都没改就通过了编译?你的vc是什么的?这么神奇?
我下去参观一下。:)


Begin (一穷二白) 于Thu May 17 10:13:49 2001提到:

前面不是跟你说了嘛。
你的局部定义屏蔽了全局定义而已,为什么要int max()这一句呢。


lvyou (让一切随风沉默) 于Thu May 17 10:15:14 2001提到:

  咦?系喔!存为*.c类型也可以通过耶。


lvyou (让一切随风沉默) 于Thu May 17 10:30:40 2001提到:

  系呀!但误打误撞也让我知道了在c++里定义函数指针
要强制定义参数类型的,更值得高兴的是认识了很多强手
师兄。很开心。^-^


bstone (Gone with the wind) 于Thu May 17 11:03:37 2001提到:

哈哈,真笨,竟然没看见!



woodman (伐木工) 于Thu May 17 19:37:48 2001提到:

在c语言里面,函数只能带回一个返回值的,如果你想带回两个以上的
返回值,就只好用指针或者用数组了,数组应用也是直接在存储单元
修改值的,而函数是在函数运行的时候临时申请一个存储单元,函数结束
是,那个内存单元也就收回了。还有一种可以用函数修改两个以上的变量
的方法,但不建议大家使用:设全局变量。一般没有人设的,坏处显而
易见的。(我上面说的函数是指自己定义的函数)

lvyou,好像你是在自学c吧?你们有开c吗?



michaelx (我有事不在) 于Thu May 17 22:19:28 2001提到:

有开c阿,只是他不去上。


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店