为什么是基本功

  前面两篇“试炼基本功”读者的留言让我反思,说明我没有把问题说清楚。

不管学任何东西,基本功的重要性是不言而喻的。大家之所以不愿意练基本功,因为其枯燥并看不到其实用价值何在。实际上,这又涉及到另一个问题,如何练基本功,是死练还是灵活应用?是在一个水平面上往前走还是在一个稍有陡度的陂上往上爬?是在思考中不断修订还是出手后就不知修订的空间在哪里?

比如,求最大数的问题:
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);

通过这样的例子,你是否体会到,所有复杂的东西只是纸老虎,能否把这只纸老虎戳破,还原他本来的面目,就看你的基本功了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值