本帖最后由 Croper 于 2019-12-20 14:09 编辑
正好手边有Dev-C,试了一下,有点意思。typedef int (*func_t)(int);
func_t func(int x) {
int flag=1;
int func2(int y){
return x+y;
};
return func2;
}
const int const_var=5;
int main(){
static int global_var;
const char* const_string="Hello World";
int stack_var=5;
int* heap_pointer=(int*)malloc(sizeof(int));
printf("全局变量参考地址:%x\n",&global_var);
printf("常量字符串参考地址:%x\n",const_string);
printf("全局常量参考地址:%x\n",&const_var);
printf("栈区参考地址:%x\n",&stack_var);
printf("堆区参考地址:%x\n",heap_pointer);
printf("代码区参考地址:%x\n",main);
printf("嵌套定义函数参考地址%x\n",func(1));
}
嗯。。基本可以看出,嵌套函数居然是定义在栈里的。。?
那么使用就受到大大的限制了,这个函数仅仅能在父函数中使用,完全不能在外界使用。甚至这种写法理论上都是错的?:func_t func(int x) {
int flag=1;
int func2(int y){
return x+y;
};
return func2;
}
int main(){
func(2)(3);
}
理论上是错的,虽然我暂时没找到反例,因为是先退栈再调用返回值的,这个时候整个func2函数已经不在栈里了。
|