先看代码:
在linux下编译、运行,结果是:aaaaaaaa
是不是有点出乎意料?其实这和printf函数的参数传递和计算有关。我们都知道,参数是从右往左开始传递的,在这里可以把printf("%s%s/n", ret(a), ret(b))拆成以下几个语句:str1=ret(b);str2=ret(a);printf("%s%s/n", str1, str2);到这里大家仔细计算一下就可以发现了,原来语句ret(b)的结果被语句ret(a)给覆盖了。那么该如何改动代码可以得到正确的结果呢?看下面示例。
其实很多编程规范或者各大公司的笔试题中都会出现类似的题,解决的方法还是要养成规范编码的习惯,其实,把函数当做参数进行传递是不好的,使代码不容易阅读。
呵呵,小题怡情,该问题就说到这。