有参函数不带参调用也行的吗?

mmzhangyu007 2007-10-27 07:51:13
问题如题,比如说定义了一函数:int compute(pel* pic,
int y,
int x,
int co,
int cx,
int cy)
调用时这样com=compute;
行吗?为什么?请高手指点
...全文
227 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
benzhuzhuzhubenben 2009-12-21
  • 打赏
  • 举报
回复
查到了Void cvSeqSort(CvSeq* seq,CvCmpFunc func,void *userdata=NULL)
应该就是这么回事了...
benzhuzhuzhubenben 2009-12-21
  • 打赏
  • 举报
回复
楼主,我也遇到同样的问题
cvSeqSort(seq,cmp_func,0);

static int cmp_func(const void*,const void*,void*)
我猜想是cv_
cvSeqSort本身声明时申明了一个参数是函数应用之类的...我是在OPENCV是遇到的,现在还是新手,也不到了解cvSeqSort的原型。
你那个问题应该也是因为直接传的函数的指针或者应用,而不是调用的函数....
否则得话从语法上时讲不错去的.
独孤过儿 2007-10-27
  • 打赏
  • 举报
回复
赋给的对象是数组中一个元素的值 。
--------------------------------
那个数组很可能是一个函数的指针数组。如果是函数的指针数组,那 com=compute; 这样的

赋值是完全合法的啊
cnvb 2007-10-27
  • 打赏
  • 举报
回复
但是有参数却想不带参数调用.小生除了知道默认参数可以做到这一点别的就不知道还有什么方法去骗过编译器了.因为在编译时会对函数调用做类型及参数检查.如果参数数目不符合肯定是会报错的.
cnvb 2007-10-27
  • 打赏
  • 举报
回复
函数名就代表了函数的地址.就像是数组的名默认也就代表是数组的起始地址一样.楼主这条语句com=compute; 其实做的操作就是把函数compute的首地址传给了com.这里的等式能通过编译是因为变量com与compute是相同的类型--->小生推测com的申明如下:
int (*com)(pel* pic, int y, int co, int cx, int cy).
这样com就是一个指针.只不过这个指针所指向的是一个返回值为int型,而参数为(pel* pic, int y, int co, int cx, int cy)的函数的地址.这样当通过com调用compute的时候使用与compute调用相同的语法就可以了.如com(pic,yy,coco,cxcx,cycy).
mmzhangyu007 2007-10-27
  • 打赏
  • 举报
回复
请看10楼的回复,期待有重量的回复
thecorr 2007-10-27
  • 打赏
  • 举报
回复
一定要有默认参数值
不然编译器不会通过的
asmst 2007-10-27
  • 打赏
  • 举报
回复
赋给的对象是数组中一个元素的值 ----请问是个什么样的数组?数组元素什么类型?
mmzhangyu007 2007-10-27
  • 打赏
  • 举报
回复
明白是怎么赋值的啦,但基础不行,还是不太清楚为什么能这样赋
就是说被赋值的对象也是一个函数,其参数跟后面那个函数的参数一样,在使用的时候再给被赋值对象加上参数。。。如果有明白其中道理的请作个解释再走,谢谢!
mmzhangyu007 2007-10-27
  • 打赏
  • 举报
回复
嗯,楼上的想法提醒偶了,找找看先
asmst 2007-10-27
  • 打赏
  • 举报
回复
他可能用了宏呢.......
mmzhangyu007 2007-10-27
  • 打赏
  • 举报
回复
编译是肯定可以通过的,因为已经有结果,可能有警告罢了(因为没细看是否有相关警告)。我也觉得啊,可人家写的程序里面就是连括号都给省了,所以就不知道是怎么调用的了。。。赋给的对象是数组中一个元素的值 。
独孤过儿 2007-10-27
  • 打赏
  • 举报
回复
楼主很明显 cmpute 后面少写了一个()
cnvb 2007-10-27
  • 打赏
  • 举报
回复
同意4楼的看法...如果你申明了参数却不带参数去调用.应该编译通不过吧??就算你骗过了编译器调用也会出错的.因为在函数调用时会做一些压栈的动作.如果参数不对到时候就会有莫名的错误了..
xlbdan 2007-10-27
  • 打赏
  • 举报
回复
调用时这样com=compute;
行吗?为什么?


这是什么啊? com=compute感觉com是一个函数指针..

如果你是说用缺省实参来调用一个函数的话是这样: compute();

所有参数均有实参
独孤过儿 2007-10-27
  • 打赏
  • 举报
回复
没明白你的意思

默认参数是这样的,如果调用函数的时候不指定参数,则参数的值就是默认参数的值,如果指定了,那就是指定的参数的值。

看下面这个小程序:

#include <iostream>
using namespace std;

void print(int m = 0)
{
cout<<"m = "<<m<<endl;
}

int main()
{
print(); //输出为0,使用默认参数值
print(5); //输出为5,使用指定的参数值

return 0;
}
mmzhangyu007 2007-10-27
  • 打赏
  • 举报
回复
因为是个比较庞大的程序,在别的地方这些参数都有定义和赋值,是否就是用调用此函数之前那些参数的最终值?
谢谢。。。
独孤过儿 2007-10-27
  • 打赏
  • 举报
回复
可以。但是要指定默认参数,如下:

int compute(pel* pic,
int y = 0,
int x = 0,
int co = 0,
int cx = 0,
int cy = 0)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧