完整的学习C++的读书路线图(2)
栈。参数可变的函数采用的是这种调用形式。
为什么这种函数要采用不同于前面的调用形式呢?那是因为__stdcall调用形式对它没有作用,被调用端根本就无法知道调用端的引数个数,它怎么可能正确工作?所以这种调用方式是必须的,不过由于参数参数可变的函数本身不多,所以用的地方比较少。 对于这两种方式,你可以编制一些简单的程序,然后反汇编,在汇编代码下面你就可以看到实际的区别,很好理解的! 重载函数有很多匹配(match)规则调用。参数为“…”的函数是匹配最低的,这一点在Andrei Alexandrescu的惊才绝艳之作《Modern C++ Design》中就有用到,参看Page34-35,2.7“编译期间侦测可转换性和继承性”。 后记: C语言的细节肯定不会只有这么多,但是这几个出现的比较频繁,而且在C语言中也是很重要的几个语言特征。如果把这几个细节彻底弄清楚了,C语言本身的神秘就不会太多了。 C语言本身就像一把异常锋利的剪刀,你可以用它做出非常精致优雅的艺术品,也可以剪出一些乱七八糟的废纸片。能够将一件武器用到出神入化那是需要时间的,需要多长时间?不多,请你拿出一万个小时来,英国Exter大学心理学教授麦克。侯威专门研究神童和天才,他的结论很有意思:“一般人以为天才是自然而生、流畅而不受阻的闪亮才华,其实,天才也必须耗费至少十年光阴来学习他们的特殊技能,绝无例外。要成为专家,需要拥有顽固的个性和坚持的能力……每一行的专业人士,都投注大量心血,培养自己的专业才能。”「注16」 注16:台湾女作家、电视节目主持人吴淡如《拿出一万个小时来》。《读者》2003.1期。“不用太努力,只要持续下去。想拥有一辈子的专长或兴趣,就像一个人跑马拉松赛一样,最重要的是跑完,而不是前头跑得有多快。” 推荐两本书: K&R的《The C Programming language》,Second Edition. Andrew Konig的《C陷阱与缺陷》。本文从中引用了好几个例子,一本高段程序员的经验之谈。 但是对纯粹的初学者不太合适,如果你有一点程序设计的基础知识,花一个月的时间好好看看这两本书,C语言本身就不用再花更多的精力了*/ /* 刚看完书,说什么也得写点东西总结一下,不自量力挑我认为最困难的部分吧 数组 给我印象最深刻的就是两个字:“左值”,当然还得加上两个字:“不是”。数组名是一个指针,指针是左值,但是数组名在C中不是一个左值,所以在C中不能出现在赋值运算的左边。 要牢记这一点,所以不可以出现把一个数组名当整个数组赋值,要赋值的话,没什么好办法,循环吧,或者用一些库里的函数,但是在用函数的时候,要牢记数组的长度,要提防越界,像我们不经常使用的fscanf这样的函数,有缓冲区,就要顾及他的溢出问题,可以制定一个字段宽度,表示要读入的最大字符数。 要确定数组的元素个数可以用到sizeof如:sizeof(a)/sizeof(a[0]),用数组中的第一个元素的大小去除整个数组的大小。 还有一点需要注意的是:值传递。当用一个简单变量调用函数时,函数会受到被调用的参数的一个拷贝,这就是参数传递,而当一个数组参数的函数被调用时,形参和实参的关系就发生了变化,变成了值传递。(不会在blog里插入图片-_-b)用语言来描述其原因的话,就是因为指针,当数组作为参数传递给函数时,只有数组的基址——数组首元素——数组名传递给函数,作为函数局部栈的地址,这个名字存放了实际数组的地址,所以即便是想象的“值赋值”(当然不能,原因如上),内容也是一样的。如果选择在函数范围内定义的局部数组中的一个元素,那么把偏移量+基地址一样会在实际数组中操作,最终结果是函数声明中定义的形参与 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |