使用C

时间:2018-03-23 18:52:54

标签: c stack-memory

我已经了解了堆栈的外观。 我知道函数的参数将首先被推送,而不是返回地址,最后是函数的局部变量。

是否可以使用堆栈创建递归函数?

这就是我试图做的事情:

void f() {
    int x = 2;
    printf("hey\n");
    void (*p)() = (void (*)()) ((&x) - sizeof(x));
    p();
}

1 个答案:

答案 0 :(得分:1)

int func (int x) {return (func(x-1);} 这是使用堆栈的递归函数。

  1. 除非你分配内存,否则一切都在堆栈上(或者可能在寄存器中)。
  2. 上面的函数没有分配任何内存(肯定会导致堆栈溢出)。

    1. 你的第4行不仅仅是UB,它不是。你将一些字节从指针减去X并认为可能有一个函数。它肯定会导致段错误。