不管学任何东西,基本功的重要性是不言而喻的。大家之所以不愿意练基本功,因为其枯燥并看不到其实用价值何在。实际上,这又涉及到另一个问题,如何练基本功,是死练还是灵活应用?是在一个水平面上往前走还是在一个稍有陡度的陂上往上爬?是在思考中不断修订还是出手后就不知修订的空间在哪里?
比如,求最大数的问题:
1)求两个数的最大数
2)求n个确定数的最大数
3)求不确定数的最大数
4)...
第一个问题仅仅用条件语句就可以完成,第二个问题就涉及到循环,而第三个问题就是变参问题,难度系数增大。第四个问题,你还能想到怎么应用吗...,能想出问题本身已经是莫大的进步。
当你能解决第三个问题的时候,是否联想到最常用的printf()函数的实现:
int printf(const char *fmt, ...)
printf()函数的参数个数并不确定,如何获得下一个参数的地址?这是一个最基本而看似简单的问题,你是否联想到把fmt的地址加1就是下一个参数的地址。而这背后的基础就是对参数存放位置的认知。编译程序把参数放在何处,是如何存放的?这些问题是语言之外的知识。当你有了这些基础之后,你自然会写出如下的关键语句:
int *para = (int *)&fmt+ 1;
有了这样一个语句以后,你就可以把变参函数回退到确定参数的函数,比如:
vprintf(char *buf,const char *fmt, int *para);
通过这样的例子,你是否体会到,所有复杂的东西只是纸老虎,能否把这只纸老虎戳破,还原他本来的面目,就看你的基本功了。
回复 周永飞 2010年06月03日 星期四 23:19