打印1到1000没有使用循环
我看到关于c ++编程上下文的问题,我检查一个解决方案,我的一个朋友给我这个代码它的工作完美但我无法理解它的逻辑以及它是如何工作的。 我向他询问了这件事,但他也不知道该程序是如何运作的,我认为他也是从某个地方采取这个解决方案。 任何人都可以在行中解释我的意思背后的逻辑(&main +
(&exit - &main)*(j/1000))(j+1);
?
#include #include void main(int j) { printf("%d\n", j); (&main + (&exit - &main)*(j/1000))(j+1); }
提前致谢
它的工作原理如下:
执行int
division j/1000
,当j
小于j/1000
,它将返回0
。 所以指针操作如下:
&main + 0 = &main, for j < 1000.
然后它调用由作为参数j+1
传递的指针操作指向的结果函数。 当j
小于1000
,它将以比前一步更多的参数1递归调用main。
当j
的值达到1000
,整数除法j/1000
等于1
,指针操作产生以下结果:
&main + &exit - &main = &exit.
然后它调用exit
函数,完成程序执行。
我已经给出了已经给出的解释,但如果写成如下,将更容易理解:
void main(int j) { if(j == 1001) return; else { printf("%d\n", j); main(j+1); } }
上面的代码与已编写的代码相同。