免费注册 查看新帖 |

Chinaunix

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

求教:怎么改,大神~~~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-16 22:06 |只看该作者 |倒序浏览
问题一:



typedef char VertexType; //顶点类型应由用户定义
typedef int EdgeType; //边上的权值类型应由用户定义
struct MGraph{
VertexType vexs[MaxVertexNum]; //顶点表
EdgeType edges[MaxVertexNum][MaxVertexNum];//邻接矩阵,可看作边表
int n; //图中当前的顶点数和边数
int e;
};
struct MGraph *G;
VertexType u;
strcmp(u,G->vex[0]); //此处出错,原因是不能将u从char型转换为const char*型
strcmp(const char*,const char*)
我该如何修改,才能使这两个数可以比较呢?





问题二:

void BFSTraverse(AMLGraph G,Status(* Visit)(VertexType v))//函数定义
BFSTraverse(G,Visit());//函数调用,这里出错--- “BFSTraverse”: 不能将参数2 从“Status”转换为“Status (__cdecl *)(VertexType)


怎么改呀,求高手~~~~

论坛徽章:
0
2 [报告]
发表于 2011-12-17 12:08 |只看该作者
求人指教!!!!

论坛徽章:
0
3 [报告]
发表于 2011-12-17 13:10 |只看该作者
第一个问题:
strcmp(u,G->vex[0]); //此处出错,原因是不能将u从char型转换为const char*型
这里u肯定是个指针,而G->vexs[0]是一个数组的元素,也就是char型的,肯定取数组地址才行。
改成
strcmp(u,G->vexs);   //不知道对不对。

第二个问题,你调用的时候,你的这个写法
BFSTraverse(G,Visit());
肯定有问题的,因为Visit()以为这个是一个函数调用了,但是外面还包了一层函数。所以C语言肯定不支持这样的,在我看来就改成
BFSTraverse(G,Visit);   //因为第二个参数是个函数指针,只需要给一个函数地址就可以了。

不知道对不对,希望指正

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
4 [报告]
发表于 2011-12-17 13:57 |只看该作者
我艹,问题好深奥啊

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
5 [报告]
发表于 2011-12-17 14:03 |只看该作者
米看懂滴说。

论坛徽章:
0
6 [报告]
发表于 2011-12-17 17:14 |只看该作者
本帖最后由 keytounix 于 2011-12-17 17:19 编辑

VertexType u;

strcmp(u,G->vex[0]); //此处出错,原因是不能将u从char型转换为const char*型
strcmp(const char*,const char*)


很明显你这个错了
strcmp()是用来比较俩个字符串的

所谓字符串数组的意思

在存储方式这个角度可以理解成是以'\0'结束的一段存储

你U是一个字符变量,怎么可以放到这个函数里面去用呢?

懂了?

如何 比较俩个字符,这个,知道的吧?


2

void BFSTraverse(AMLGraph G,Status(* Visit)(VertexType v))

我想你还是没看清楚 Status (* Visit)(VertexType v)) 这个代表的是什么

这个意味着 参数类型是一个指向函数的指针
这个函数 返回值是Status 型,
他有一个输入参数
输入参数类型是VertexType

而你在调用时
BFSTraverse(G,Visit());

Visit()这个 很明显 是 一个 Status类型的值


而声明中的是指向函数的指针,也就是说类型不匹配
懂不?


我洗个例子给你

Status visit_method(VertexType v)
{
    ////

}

typedef Status (* visit_fun_t)(VertexType ));

visit_fun_t  pfun= &visit_method;


BFSTraverse(G,pfun);


看到没?
这样调用的


以上代码 是个人理解做出来的
也没有通过测试
如有错误
欢迎指出
谢谢

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
7 [报告]
发表于 2011-12-17 18:23 |只看该作者
顶LS。。。。
ps,不知道你的Visit()是怎么实现的?

论坛徽章:
0
8 [报告]
发表于 2011-12-19 23:04 |只看该作者
多谢呀~~~~~第一个问题,加个取地址符就可以比较两个常量了,第二个问题我想我应该看看函数指针方面的知识~~~~~~真心感谢,讲的很详细~~~~

论坛徽章:
0
9 [报告]
发表于 2011-12-19 23:10 |只看该作者
我觉的第一个还是有点问题的  我改成了这样strcmp(&u,&G->vex[0]); ------多谢了~~~~{:2_172:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP