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