免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5794 | 回复: 8
打印 上一主题 下一主题

[函数] 对C中函数使用函数作为参数理解的不是太透彻 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-29 14:45 |只看该作者 |倒序浏览
C中函数作为参数比如
int compare(SqList &L,int e);

1、下面这个写法正确吗?
int   Status ListDelete_sq(SqList &L, int i, int e,compare());

2、C中有函数指针

int  (*cmp) ();
  cmp = compare;?
对应的上述函数申明该如何写。

初学C  不是太清楚,谢谢。

论坛徽章:
0
2 [报告]
发表于 2006-12-29 15:52 |只看该作者
int   Status ListDelete_sq(SqList &L, int i, int e,compare());
写法有问题,这样写的意思是compare函数的返回值为参数,但是compare函数调用参数和定义不同

你想实现函数指针,可以直接int   Status ListDelete_sq(SqList &L, int i, int e,compare);

论坛徽章:
0
3 [报告]
发表于 2006-12-29 15:55 |只看该作者
如果没记错应该是这样写
typedef RETURNTYPE (*FUNCTIONNAME)(PARAMETERS LIST);
int   Status ListDelete_sq(SqList &L, int i, int e,FUNCTIONNAME fun);
调用时
FUNCTIONNAME(PARAMETERS LIST)

论坛徽章:
0
4 [报告]
发表于 2006-12-29 16:12 |只看该作者
首先谢谢楼上2位
但是

Status LocateElem_sq(SqList &L,ElemType e,compare);
这样写编译错
compare函数这样定义的

Status compare(SqList &L,int e);

关键的点是如何使用函数作为函数的参数,函数指针我还是知道定义的

比如定义一个返回int 类型的函数指针

int (*cmp)()

这样就是一个函数指针,但是是否可以使用这个指针作为函数参数,以及如何使用我还是很模糊。

论坛徽章:
0
5 [报告]
发表于 2006-12-29 16:18 |只看该作者
Status LocateElem_sq 定义时,函数指针参数 与compare定义时参数相同

论坛徽章:
0
6 [报告]
发表于 2006-12-29 16:19 |只看该作者
int a()
{
        return 10;
}

typedef int (*e)();

int b(e c)
{
        return c() + 10;
}
int main()
{
        std::cout << b(a) << std::endl;
       return 0;
}
vc6.0编译通过。你的code里面直接拿出来应该是一个左值吧。参数列表中需要的是一个类型。

论坛徽章:
0
7 [报告]
发表于 2006-12-29 16:19 |只看该作者
把你的Status LocateElem_sq定义和compare定义的语句贴上来

论坛徽章:
0
8 [报告]
发表于 2006-12-29 16:54 |只看该作者
我再试一下

论坛徽章:
0
9 [报告]
发表于 2006-12-30 11:28 |只看该作者
原帖由 fireman119 于 2006-12-29 16:19 发表
int a()
{
        return 10;
}

typedef int (*e)();

int b(e c)
{
        return c() + 10;
}
int main()
{
        std::cout << b(a) << std::endl;
       return 0;
}
vc6.0编译通过。你的code里 ...




这段代码写的很精辟,谢谢,我对照着使用是正确的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP