在main(_)这里的“_”是个参数名,下划线也可以做参数名的。
---------------------------------------------------------
下面的是别人看了此代码的回贴:
这段代码真的是很有意思。从中我学到不少技巧。
首先,我第一次发现main可以只有一个参数。(以前我只知道它可以有两个或没有参数)
第二,我第一次见%*s的用法。看过这段代码后我查阅了很多资料,可都没有找到关于它的信息。最后还是通过观察这段代码及其运行结果,还有做实验才明白。
下面是我模仿这段代码写的另一个小程序,以此表达我学到新东西后的喜悦之情:)
# include
main(_){char *x="EWl#NEE#gN#`w#`W#`W#";while(_=*x/9) _-=3, printf("\n%*s"+!!_,_,"_/_/_/_/"+*x++%9);}
需要说明的一点是,字符串中的"l"是"L"的小写,"`"是键盘主键区最右上角的那个键。
原代码的输出是"knocker"吧?好像是字符串出了点问题,我看到的结果有点错位。
不管怎么说,我很佩服这段代码的原作者。他的算法很巧妙。
他用这样一个公式
x=(a+c)*k+(m-b)
完成对图形数据的处理(我不敢妄言压缩)。这有点像对BMP位图的一种压缩算法。
-------------------------------------------------------------------
about %*s:
If the width specification is an asterisk (*), an int argument from the argument list supplies the value. The width argument must precede the value being formatted in the argument list. A nonexistent or small field width does not cause the truncation of a field; if the result of a conversion is wider than the field width, the field expands to contain the conversion result
for example:
main()
{
char *p="AAAAA";
printf("[%s]\n",p);
printf("[%*s]\n",10,p);
}
|