当前位置:C++技术网 > 资讯 > C语言基础教程:12 一些概念的讲解

C语言基础教程:12 一些概念的讲解

更新时间:2015-09-19 23:17:10浏览次数:1+次

    这一讲给大家说说一些与内存相关的名词概念。先来说说标识符的作用域,“域”这个字道出了“区域,范围”这个意思。整体来说就是标识符发挥作用的范围。好了,给大家举个例子

void Test()

{

       int k;

}

int main()

{

       int k;

       return 0;

}

    这个程序中,都定义了k,你有没有想过:“这不同名了吗?”,是啊,但为什么编译器没有发错任何警告或者错误呢?原因就是这两个k的作用域不同。Test函数中的k的作用域的范围就是从定义出开始到下面有‘}’结束而main函数中的k的作用域为定义处到下面的‘}’,OK!没有任何重复交叉的地方,那么编译器就能很好地工作了。注意啦,这种位与函数内部定义的变量的作用域称为局部作用域。与之对应的就是“全局作用域”——独立于任何函数定义的变量  如:全局变量。当然还有块作用域,块作用域这个很简单就是在{}内定义的,举个例子:

void temp()

{

     {

int l;//这里的l的作用域仅限于定义处到下面的‘}’出

 }

 l++;//error C2065: 'l' : undeclared identifier,因为这里超出了l的作用域

}

    当然还有文件作用域,就是限定某个变量或者函数的作用域仅限于本文件,通过static关键字即可达到。

    再说说生命周期,生命周期就是表达的变量的存在时间。生命周期与变量在内存中的存储区有很大的关系。存储区大致可以分为一下几个部分(不细分了,初学者学到这就可以了):全局区,代码区,堆区,栈区。全局区的变量拥有与程序一样的生命周期,堆区的变量的生命周期由你决定,不释放就一直存在,而栈区的变量的声明周期则是编译器自动维护,一般情况下函数调用结束则内存释放,生命结束,而有的则是到达‘}’结束生命周期。在C语言中,全局变量以及static修饰的变量都是存储在全局区,malloc分配的内存空间在堆去,其他情况就属于栈区了(先不考虑寄存器变量)

    局部变量和全局变量的概念就简单啦,上面已经有说了 。

    存储类型  :就是控制变量存储在哪的。有四个关键字修饰:auto(默认),static,register, extern

    下面来具体说下:

    auto:指示变量存储在栈上,这是默认值

    static:指示变量存储在全局区(或者叫做静态区)

    register:建议性的指示编译器将变量直接安排在寄存器上,至于会不会这么做就看编译器的“心情”了

    extern:告诉编译器,这个变量是在外部文件定义的,这里只是引用

 

好了  这讲就到这,主要给大家理清一些概念。有什么不懂的可以联系我By QQ:969722243