我不确定在递归期间如何创建变量并将其存储在内存中。下面是取自 C Primer Plus 的示例:
#include <stdio.h>
void recursiontest(int);
int main(){
recursiontest(3);
return 0;
}
void recursiontest(int n){
printf("Level %d : %#x\n", n, &n);
if(n < 4)
recursiontest(n + 1);
printf("LEVEL %d : %#x\n", n, &n);
return;
}
产生输出:
3级:0x3ce1f8bc
4级:0x3ce1f89c
级别 4:0x3ce1f89c
级别 3:0x3ce1f8bc
看起来好像原始函数调用本地的“n”变量的地址顺序晚于第一个(也是唯一的)递归调用的地址。这是为什么?
当我调用一个函数时,它的形参不是根据传递给它的实际参数声明和定义的吗?这是否意味着第一次调用本地的整数 n 在第二次(递归)调用之前创建?第二次调用的 n 怎么会有比第一次调用更早的地址呢?