如何在 c 编程中不使用循环、递归或 goto 语句打印 1 到 100?

sag*_*Das 5 c algorithm

我从互联网上找到了这个解决方案。

#include <stdio.h>
#include <stdlib.h>
int n = 0;
void first() {
    void* x;
    printf("%d\n", ++n);
    if (n >= 100) {
        exit(0);
    }   
    *((char**) (&x + 4)) -= 5;
}
int main() {
    first();
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释该行的含义*((char**) (&x + 4)) -= 5;吗?

Lun*_*din 4

这种练习完全没有意义。话虽如此,您的“黑客”似乎正在尝试模拟 的行为setjmp/longjmp,它存储/恢复执行环境的状态,例如程序计数器。

// Silly code to solve artificial problems. Don't write programs like this.
#include <stdio.h>
#include <setjmp.h>

void silly_print (int max)
{
  jmp_buf jb;
  int n = setjmp(jb);
  printf("%d\n", ++n);
  if(n < max)
  {
    longjmp(jb, n);
  }
}

int main() 
{
  silly_print(100);
}
Run Code Online (Sandbox Code Playgroud)

注意: setjmp/longjmp被认为是危险的,因为它们可能会导致各种意想不到的副作用。它们也被认为是不好的做法,因为它们可以用于意大利面条式编程,如上面的代码所示