您的位置:首页 > 编程语言 > C语言/C++

编程之初之c++学习心得(一)

2009-05-16 14:49 561 查看
写在前面
恍恍惚惚,就已经在大学里混了快三年了。一直自我感觉良好,每个学期都拿着奖学金,有一群不错的朋友,还顺着自己的兴趣大概看了千万字的小说和历史评论。当和煦的阳光透过自习室的窗子照到我的桌子上时,我也曾满足于这种忙碌的充实,以为世界就是这样美好。
前些天,得到老师的通知,要我申报IBM的暑期实习项目,在填写完基本信息之后,我开始顺着职位列表浏览,发现IBM的暑期实习的要求对于我来说竟是那么遥不可及,不但一些技术掌握远达不到岗位要求,更是有一大堆的名词连听都没听过,同样的问题也出现在申请微软暑期实习的时候。而自己的英语和数学也未臻一流境界,我不禁问自己:这些年来,我究竟做了什么?!
我不想放弃机会,更不想放弃自己,我找到了一本《c++ primer》,重新开始自己的编程之初。
这篇文字,主要写自己看这本书的时候对新知识的体会,甚至有对书中原文的大规模复制,结合自己以前看的《代码大全》等书以及上课总结的想法,平凑成一篇文章,不到之处,多多见谅。

技巧还是奇技yin巧?
先看一个例子:
While( ( I = get_value() ) != 42 )
{
….
}
这个条件循环的条件判断原理想必大家都懂,这里就不再赘述。如果要多年前来看,我一定会被这个判断的简介打动,然而,这一段代码显然是给机器读得,不是让人来读的。抛开这个莫名其妙的 42 不说,这个条件判断的意义就不是很明白。这个例子因为小,所以很多人一定会笑话我的无病呻吟,但是如果是一个很长的,很复杂的,充斥着一大堆的“&&”“||”“!”以及比较符号的循环条件判断,我想大家就明白这样写的害处了吧。
程序是给人读得,自己要修改,别人也要阅读。不要为了减少程序的代码行数就干一些自以为是的事情。记得最初上c语言课的时候,我们一边比拼自己程序运行的时间,一边比较程序的行数,并以此自矜。也曾干过一些类似把多条语句放在一行上的傻事,而老师也总是找一些代码行数及其短的程序来展示,记忆最深的就是一道10行内用数学方法解决八皇后的例子,当是觉得很牛,不过直到那门课程结束包括老师在内也没有任何人看懂这个方法,
更谈不上去学习了。作为一个ACM的题解,这段程序无疑惑的巨大的成功,但是却十分不利别人的阅读和学习,在实际工程中,这样的程序员无疑给小组带来巨大的惊喜和忐忑不安。

以上这个例子除了说明我想说明的问题外,也暴露了自己的水品实在有限,但是当大家最初学习编程的时候,看到基本教材里各种指针和数组以及自增自减符的无规律组合的时候难道不头疼么,花了大量的时间弄清楚了 *p++ = *q--, (*p)[]++这类东西,但是除了考试外基本不敢使用。花时间弄懂这些是应该的,但是要在项目中写这些东西可能是对自己调试能力和队友的忍耐力的一种挑战吧。我学习的时候,宁愿看到的是
*p = *q;
P++;
q++;
而不是 *p++ = *q++;

从goto语句开始
对goto语句的使用与否的争议,大概到现在也没有停止。我作为一个初生牛犊,更是不敢把自己的想法强加于人。在这里,我只是想通过对goto语句的说明,来引伸出自己的另外一些看法。
大一刚上c语言课的时候,就记得来时及其郑重的宣布:凡是在提交作业中发现有goto语句的一律记为零分。同时也着力宣称goto语句是多么的不合理,多么的破坏程序结构。
其实问题的关键不在于goto是否正确,而在于为什么我们许多人连goto都没有用过,就敢贸然的给goto判个死刑呢?其实自己在写小程序的时候,发现在多重循环等情况中,用goto来直接跳出多重循环的确很方便,而且使用量很少的时候,程序的结构并没有被破坏。
所以,学习之道,在于不迷信老师,不迷信书本,我使用它,是因为我从其中得到好处,而不仅仅是老师告诉我应该这么做。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: