读书人

看到一个挺奇怪的代码求解解决方法

发布时间: 2013-03-27 11:22:42 作者: rapoo

看到一个挺奇怪的代码,求解

#include <stdio.h>
int main(int n)
{
printf("%d %d ",n,~n)^10&&main(n+2);
}

求个高人解释一下,这代码正负交替输出1到1000
[解决办法]
我来解释下吧:
刚开始的n的值为1,这个好理解,知道main的原型为int main(int argc, char* argv[]),就知道n的值为参数个数1;
printf("%d %d ",n,~n)这个也好理解,打印n与n取反的值,若n为1,取反为-2,开始就打印"1 -2 ";
printf返回值为打印的字符数,返回值再与10异或,只有当返回值为10时,"printf("%d %d ",n,~n)^10"才为0(false),不再进行后面的"&&main(n+2)"调用,其他情况都需要再调用main(n+2);
当n=999时,打印为“999 -1000 ”,刚好10个字符,也就不再调用main(n+2),结束。
[解决办法]
main函数原型 int main(int argc, char *argv[]);
argc 是传个main函数的参数个数,也就是例子中的n,在vc中默认n为1

注意:
printf函数原型int printf( const char *format [, argument]... );
返回值
Return Values // 查看MSDN 或者linux下的相关帮助文档
returns the number of characters printed, or a negative value if an error occurs.
也就是返回打印在屏幕中的控制台的字符数


C语言运算符的优先顺序: () > ~ > ^ > &&
函数第一次调用时printf函数打印1 -2 ----》第一次printf返回3
那么什么时候停止打印呢? 也就是printf函数的返回值和10相异或为0 这时就 停止 main(n+2)的递归调用,所以程序结束。
当 n=999时,printf返回值是10,10^10 的值是10,这时函数停止调用,所以最后打印出来的是999,-1000

读书人网 >C语言

热点推荐