24-全局变量

全局变量

  • 定义在函数外面的变量是全局变量
  • 全局变量具有全局的生存期和作用域
  • 在任何函数内部都可以使用它们

全局变量的初始化

  • 没有初始化的全局变量会得到0值
  • 指针会得到NULL
  • 只能用编译时刻已知的值来初始化全局变量

const int gall = 12;
int g2 = gall;
这种写法是正确的,常量可以用来初始化

int gall = 12;
int g2 = gall;
这种写法是错误的,变量不可用来初始化

  • 它们的初始化发生在main函数之前

被隐藏的全局变量

  • 如果函数内部存在与全局变量同名的变量,则全局变量被隐藏
    请添加图片描述请添加图片描述

f()函数中新定义的局部变量gall把全局变量的值隐藏了,但出了f(),全局变量的值没有变

静态本地变量

  • 在本地变量定义时加上static修饰符就成为静态本地变量
  • 当函数离开的时候,静态本地变量会继续存在并保持其值
  • 静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值

请添加图片描述

请添加图片描述

  • 静态本地变量实际上是特殊的全局变量
  • 它们位于相同的内存区域
  • 静态本地变量具有全局的生存期,函数的局部作用域
  • static在这里的意思是局部作用域(本地可访问)

返回指针的函数

  • 返回本地变量的地址是危险的(原因:出了作用域,被释放后,该地址可能会被分配给其他变量)
    请添加图片描述
    请添加图片描述
  • 返回全局变量或静态本地变量的地址是安全的
  • 返回函数内malloc的内存是安全的,但是容易造成问题
  • 最好的做法是返回传入的指针

tips:

  • 不要使用全局变量来在函数之间传递参数和结果
  • 尽量避免使用全局变量
  • 使用全局变量和静态本地变量的函数是线程不安全的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值