美文网首页
C-作用域规则

C-作用域规则

作者: 小石头呢 | 来源:发表于2019-08-01 12:22 被阅读0次

    C语言中有三个地方可以声明变量:

    • 在函数或者代码块内部的局部变量
    • 在所有函数外部的全局变量
    • 在形式参数的函数参数定义中

    一.局部变量

    在某个函数或代码块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。

    二.全局变量

    全局变量是定义在函数外部,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量。

    在程序中,局部变量和全局变量的名称可以相同,但是在函数内,如果两个名字相同,会使用局部变量值,全局变量不会被使用。

    三.形式参数

    函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用。

    四.全局变量与局部变量在内存中的区别:

    • 全局变量保存在内存的全局存储区中,占用静态的存储单元

    • 局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元

    五.初始化局部变量和全局变量

    当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动对其初始化,如下所示

    正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果,因为未初始化的变量会导致一些在内存位置中已经可用的垃圾值

    六.形参和实参的区别

    在函数使用中:

    • 形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。

    • 实参出现在主调函数中,进入被调函数后,实参变量也不能使用。

    在调用过程中:

    • 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。

    • 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

    例子

    当形参和实参不是指针类型时(也没有引用关系),在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。

    相关文章

      网友评论

          本文标题:C-作用域规则

          本文链接:https://www.haomeiwen.com/subject/cddqdctx.html