在学习数据结构时,将算法实现的过程中总是出现一些意想不到的错误,我想大概是对相应的编程语言认识太过浅薄的缘故。但这不是什么大问题,本来就是在学习嘛,能发现更多的问题当然更好,只要能耐住性子解决,相信比那些没有问题的人学到的更多。
因为挂科,所以在努力学习C语言版的数据结构。既然挂科了,自身掌握的知识当然有限,对C语言的认识也仅限于那些基本的语法,甚至还没学全。这种状态下学习自然问题多多,今天遇到的问题以后肯定还会遇到,所以记录下今天解决问题的思路,下次就不会这么纠结了。像昨天废了好几个小时的折腾,才发现原来只是几个字母写错了,而调试信息中每次都会出现,我却没有仔细认清楚,借着这个教训,今天能在一会的功夫里解决问题这是太好了。
用gcc编译一个关于十字链表的实现时,总是提示"expected expression before '{' token"
错误的一行内容是"(*p) = {i,j,(*G).xlist[j].firstin,(*G).xlist[i].firstout,NULL};"
这个*p是在函数内定义的一个结构体别名,而结构体的定义是在函数外的,所以在整体赋值的时候总是出错。通过百度才知道结构和数组在定义时赋值叫做初始化,能用一个{}整体赋值,而定义以后再想要赋值则只能一次给一个成员赋值,不能用{}。不知道在用vc++编译时怎么样,反正用gcc是不行。要非想这么用,那就得这么写。
(*p) = (struct ArcBox){i,j,(*G).xlist[j].firstin,(*G).xlist[i].firstout,NULL};
这个ArcBox是结构体的名字,根据实际情况修改。据说这是c99标准才能用的,我也没有深入研究过,大体就是这么回事。
虽然是一个很简单的问题,但对像我这样摇摆不定的人来说,也许就这么点难题,就会改变对整个课程的看法,从此不再触碰,那真是一件相当遗憾的事。事物总是有两面性的,一旦坚定了信心,再碰到这类小问题就成了趣味小实践,对整个学习活动有好的推动作用,很有成就感的。