美文网首页
局部变量和全局变量

局部变量和全局变量

作者: 远方的路_ | 来源:发表于2018-09-21 00:33 被阅读0次

    什么是局部变量?

    在Go语言和C语言中写在{}中或者函数中或者函数的形参, 就是局部变量

    什么是全局变量?

    在Go语言和C语言中写在函数外面的就是全局变量

    局部变量和全局变量的作用域

    • 在C语言中局部变量的作用域是从定义的那一行开始, 直到遇到}结束或者遇到return为止
      Go语言中局部变量的作用域和C语言一样
    • 在C语言中全局变量的作用域是从定义的那一行开始, 直到文件末尾为止
      Go语言中的全局变量, 只要定义了, 在定义之前和定义之后都可以使用

    局部变量和全局变量的生命周期

    • 在Go语言和C语言中局部变量, 只有执行了才会分配存储空间, 只要离开作用域就会自动释放, 其局部变量存储在栈区

    • 在Go语言和C语言中的全局变量, 只要程序一启动就会分配存储空间, 只有程序关闭才会释放存储空间, 其全局变量存储在静态区(数据区)

    局部变量和全局变量的注意点

    • 在Go语言和C语言中在相同的作用域内, 不能出现同名的局部变量
    • 在C语言中相同的作用域内, 可以出现同名的全局变量
      在Go语言中相同的作用域内, 不能出现同名的全局变量

    特殊点

    1. 在C语言中局部变量没有初始化存储的是垃圾数据, 在Go语言中局部变量没有初始化, 会默认初始化为0
    2. 在C语言中全局变量没有初始化存储的是0, Go语言和C语言一样
    3. 在Go语言中, 如果定义了一个局部变量, 但是没有使用这个局部变量, 编译会报错
    4. 在Go语言中, 如果定义了一个全局变量, 但是没有使用这个全局变量, 编译不会报错

    总结注意点:

    1.相同的作用域内, 无论是全局变量还是局部变量, 都不能出现同名的变量
    2.变量离开作用域就不能使用
    3.局部变量如果没有使用, 编译会报错, 全局变量如果没有使用, 编译不会报错
    4.(:=)只能用于局部变量, 不能用于全局变量
    5.(:=)如果用于同时定义多个变量, 会有退化赋值现象

    var num int
    num, value := 456, 789
         // 1. var value int
         // 2. num = 456
         // 3. value = 789
    

    如果通过:=定义多个变量, 但是多个变量中有的变量已经在前面定义过了, 那么只会对没有定义过的变量执行:=, 而定义过的变量只执行=操作

    相关文章

      网友评论

          本文标题:局部变量和全局变量

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