不使用循环打印1到1000

时间:2014-11-04 09:29:03

标签: c

我在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);
}

提前致谢

2 个答案:

答案 0 :(得分:28)

它的工作原理如下:

执行int分部j/10000总是在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);
   }   
}

上面的代码与已经编写的代码相同。