变量与函数的声明与定义

来源:互联网 发布:两组数据的差异性分析 编辑:程序博客网 时间:2024/05/17 03:04
一、作用域:局部变量与全局(外部变量)
    ①局部变量
        1、本函数内or本程序区块内(复合语句中定义的变量)才可使用,形参也是局部变量
        2、故不同的函数中相同的变量名互不干扰
    ②全局变量(也称为外部变量)
        1、可被本文件其它文件调用 
        2、有效范围:从定义变量开始至本源文件的结束


二、变量的储存类别
    ①生存期
        1、静态存储方式(全程):运行开始时就已分配(编译时已赋值),直到程序结束
        2、动态存储方式(临时):运行时根据需要分配
            【包括】
    ②存储类别
        auto:在栈中生成,函数内部默认为auto
        static:在编译时就已赋值,且仅此一次
            1、静态局部变量   static int a;    
                    仅能在本函数中使用,且函数结束后变量不消失。
                    再次调用该函数时直接拿该变量来用
            2、静态全部变量        
                    仅限于本文件使用,其它文件不能使用
            【注】1)静态变量若不赋初值,默认初值为0
                2)虽然静态局部变量在函数调用结束后仍存在,但其它函数不能调用
        register:存储在寄存器,且在函数使用后自动销毁(这点与auto相同)
        extern:声明外部(全局)变量
             【例】    int a;
                    int main()    {extern b;    return 0;}
                    int b;
                【解析】a、b均为全局变化,但main能直接使用a,但b要再声明
三、跨文件全局变量使用:使用另一文件的全局变量要声明extern a;
四、声明(说明有这个变量存在)与定义(会给予该变量内存空间)
        1、外部int a; 即是声明也是定义
        2、extern a;只是声明


五、小结
    1、作用域:
        ①局部
            1)自动变量 2)静态局部变量 3)寄存器变量  
            【以及形参,因为形参只能定义为 auto或register】
        ②全局
            1)静态外部变量(只即本文件)    2)外部变量(非静态可由其它文件使用)
    2、生存期
        ①静态
        ②动态(本函数有效)
            1)auto 2)register  3)形参(auto或register)
    3、存储位置
        ①静态存储区(data区)
            1)静态变量  2)全局变量
        ②动态存储区(栈):auto
        ③CPU:register
六、注意
    1、static与全局变量作用不同
            对局部变量,static变量调用仍存在
            对全局变量,static变量仅限本文件使用
    2、函数本质上是全局的(默认为外部函数),1个C文件的函数可以被另一个C文件调用,但可用static进行限制
        ①外部函数
                (extern)int fun(int a);
        ②内部函数
                static int fun(int a);
0 0
原创粉丝点击