作用域及内存的开辟与释放

2018-09-16  本文已影响0人  Cc_5691

程序执行的作用域

上代码

int main()
{
    int a =1;
    for(int i = 0;i <3;i++){
        int b = 2;
        printf("%i\n",i);
    }
    return 0;
}

-这是一个简单的main 函数,里面嵌套了一个for循环,其中a在main函数之内,for循环之外定义,i在for循环()中定义,b在{ }中定义。
for循环比较典型,所以我们以此举例

分析之前我们要明确几个概念
int main()
{
    int a =1;
    for(int i = 0;i <3;i++){
        int b = 2;
        printf("%i,%i\n",i,a);
    }
    return 0;
}

可以访问外层作用域a,如图


=
#include <stdio.h>
int main()
{
    int a =1;
    printf("%i",b);
    for(int i = 0;i <3;i++){
        int b = 2;
        printf("%i,%i\n",i,a);
    }
    return 0;
}
int main()
{
    int a =1;
    for(int i = 0;i <3;i++,b++){
        int b = 2;
        printf("%i,%i\n",i,a);
    }
    return 0;
}

内存管理

栈内存(stack)

int ages[10240*10240]; // 程序会崩溃, 栈溢出

int main()
{
    // 存储在栈中, 内存地址从大到小
    int a = 10;
    int b = 20;
    printf("&a = %p\n", &a); // &a = 0060FEAC
    printf("&b = %p\n", &b); // &b = 0060FEA8
    return 0;
}

堆内存(heap)

上一篇下一篇

猜你喜欢

热点阅读