|
发表于 2019-12-20 14:08:29
|
显示全部楼层
本帖最后由 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函数已经不在栈里了。
|
|