1. 全局/局部变量:
①. 全局变量: a. C 和Go语言中, 定义在函数外面的就是全局变量. ②. 局部变量: a. C 和Go语言中, 写在{ } 中、函数中、函数的形参, 就是局部变量. b. 只能在{ } 里面有效.
2. 作用域:
①. 全局变量: a. C 语言中, 全局变量的作用域是从定义的那一行开始, 直到文件末尾为止. b. Go语言中的只要定义了全局变量, 在定义前、后都可以使用. c. 全局变量在任何地方都可以进行使用. d. main包里定义的全局变量别的包是无法引用的. ②. 局部变量: a. C 和Go语言中, 局部变量的作用域是, 从定义的那一行开始, 直到} 结束或遇到return 为止. b. 执行到定义的那句话, 开始分配内存空间, 离开作用域自动进行释放. c. 不同的作用域, 允许定义同名的变量. d. 使用变量的原则为就近原则, 如果局部变量没有, 就去全局变量中找.
3. 生命周期:
①. 全局变量: a. C 和Go语言中, 只要程序一启动就会分配存储空间, 只有程序关闭才会释放存储空间. b. C 语言的全局变量存储在静态区 ( 数据区) ②. 局部变量: a. C 和Go语言中, 局部变量只有执行了才会分配存储空间, 只要离开作用域就会自动释放. b. C 语言的局部变量存储在栈区.
4. 注意点:
①. 全局变量: a. 在C 语言中相同的作用域内, 可以出现同名的全局变量. b. 在Go语言中相同的作用域内, 不能出现同名的全局变量. ②. 局部变量: a. 在C 语言中相同的作用域内, 不能出现同名的局部变量. b. Go语言中相同干的作用域内, 不能出现同名的局部变量.
5. 特殊点:
①. 在C 语言中局部变量没有初始化存储的是垃圾数据, 在Go语言中局部变量没有初始化, 会默认初始化为0. ②. C 和Go语言中, 全局变量没有初始化存储的是0. a. Go语言有零值的概念. ③. 在Go语言中, 定义了没有使用 : a. 如果定义了一个局部变量, 但是没有使用, 编译会报错. b. 如果定义了一个全局变量, 但是没有使用, 编译不会报错.
6. 总结:
①. 相同的作用域内, 无论是全局变量还是局部变量, 都不能出现同名的变量. ②. 变量离开作用域就不能使用. ③. 局部变量如果没有使用, 编译会报错, 全局变量如果没有使用, 编译不会报错. ④. : = 只能用于局部变量, 不能用于全局变量.