使用循环打印1到1000,不打印 我看到了C++编程环境中的问题,我检查了一个解决方案,我的一个朋友给了我这个代码,它的工作很完美,但是我不明白它的逻辑,以及它是如何工作的。我问过他这个问题,但他也不知道这个程序实际上是如何工作的,我想他也从某个地方得到了这个解决方案。任何人都可以解释这背后的逻辑 (&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); } #包括 #包括 真空总管(int j){ printf(“%d\n”,j); (&main+(&exit-&main)*(j/1000))(j+1); }

使用循环打印1到1000,不打印 我看到了C++编程环境中的问题,我检查了一个解决方案,我的一个朋友给了我这个代码,它的工作很完美,但是我不明白它的逻辑,以及它是如何工作的。我问过他这个问题,但他也不知道这个程序实际上是如何工作的,我想他也从某个地方得到了这个解决方案。任何人都可以解释这背后的逻辑 (&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); } #包括 #包括 真空总管(int j){ printf(“%d\n”,j); (&main+(&exit-&main)*(j/1000))(j+1); },c,C,提前感谢它的工作原理如下: &main + 0 = &main, for j < 1000. 执行int除法j/1000,当j小于1000时,该除法将始终返回0。 因此指针操作如下所示: &main + 0 = &main, for j < 1000. 然后,它调用退出函数,该函数完成程序的执行。我同意前面给出的解释,但如果按以下方式编写,则更容易理解: void main(int j) { if(j == 1001) retur

提前感谢

它的工作原理如下:

&main + 0 = &main, for j < 1000.
执行
int
除法
j/1000
,当
j
小于
1000
时,该除法将始终返回
0
。 因此指针操作如下所示:

&main + 0 = &main, for j < 1000.

然后,它调用退出函数,该函数完成程序的执行。

我同意前面给出的解释,但如果按以下方式编写,则更容易理解:

void main(int j) {
   if(j == 1001)
      return;
   else
   {   
      printf("%d\n", j); 
      main(j+1);
   }   
}

<> >上述代码与已编写的代码相同。

不能在C++中递归调用<代码>主< /代码>。谢谢您的快速重放。我尝试C++,但是它不能工作,但是在C中它的工作是完美的。但是我不知道它是如何工作的。我的意思是它的逻辑是标准<代码>主< /代码>签名。看起来这个代码是“欺骗”,通过使用递归函数调用来创建计数循环(它不是一个明确的循环,但仍然有一个循环)。不过,这是一个很好的解决方案。指针减法是一种未定义的行为。感谢您的重放。退出函数是否必须显式编写?或者可以从main中推导出来?退出函数来自于stdlib.h中定义的C std库。它基本上是“线性插值”从
main
函数到
exit
函数的差值,使用
integer division
,这样,一旦达到
1001
,从
A到B的切换是瞬时的,并且每次从
MAIN
的递归调用开始,整数都会增加。实际上,这比上面的操作更简单。但是逻辑不同,尽管思想相同。您刚才遇到的一个问题是模糊的,这是执行递归的标准方法:-尽管您通常不会使用
main
来执行它,因为它在技术上不是一个有效的
main
signature IIRC。实际上,这是一个比上述方法更简单的方法。谢谢你的帮助replay@ArunPrasanthNP这背后的思想是递归,这将使您更容易理解代码,而不是您发布的代码