这段代码如何在C中打印一系列数字?

vai*_*hav 1 c

这是一个基本的C程序,它不使用循环或条件来打印数字.我想知道它是如何做的,以及"退出"和"主要"的目的.被main用于递归在这里?

#include <stdio.h>
#include <stdlib.h>

void main(int j) {
    printf("%d\n", j);
    (&main + (&exit - &main)*(j/1000))(j+1);
}
Run Code Online (Sandbox Code Playgroud)

Sne*_*tel 5

假设j是500.那么(&exit - &main)什么(无所谓)并且(j/1000)是0,所以(&main + (&exit - &main)*(j/1000))(j+1)是有效的main(501).相反,如果j为1000,(j/1000)则为1,这意味着(&main + (&exit - &main)*(j/1000))(&main + (&exit - &main))(也就是说&exit)相同,因此它会调用exit(1001).

  • 如果程序最初使用2000或更多参数调用,那么所有地狱都会破裂.或者,至少,行为甚至比其余时间更加不确定. (3认同)