全局变量和局部变量小记

全局变量在整个程序中有效,局部变量只在函数内部有效。全局变量在未初始化时默认为0,局部变量则可能包含随机值。当函数内部定义的变量与全局变量同名时,局部变量具有更高的优先级。局部变量具有块作用域,全局变量有文件作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 什么是全局变量?什么是局部变量?ecb49e5b5091413cb7c0531c67c9fde3.png

 如图,定义在函数外的变量就是全局变量,而定义在函数里面的,就是局部变量,这里的函数外和函数内,不仅仅是指main,而是所有函数。

这是最直接的辨别方法,函数外全局变量,函数内局部变量,知道什么是局部变量什么是全局变量后,就得知道它们的使用方法了。

先来看全局变量,它的定义有些规则,比局部变量更复杂一点点。

图一07013984cbc14bd0bd5c5113322b9fea.png

图二

 f96bc6c8d8024ccbaf47c44aaf99be09.png

 以上两种定义全局变量的方法均是合法的。5e3754cdd7f847fe8ebdcb45face81c4.png

1b08775850444cfe852a36b17aa57b1d.png这种定义全局变量的方法和图一 的相似,但却是不行的,原因是因为a被多次初始化,也就是说,全局变量被定义时,不能多次初始化,只能初始化一次。而图一中a先被声明,再被初始化。

全局变量定义

  1. 先声明,在初始化。
  2. 声明的同时初始化。

 那么,如果不初始化呢?

b0b622dd44594329b99673387029a9e5.png

 如果不初始化,不赋值给全局变量,可以发现全局变量中存储的值是0。

静态存储类型如果不初始化的话,它的值就自动存0,由此可得,全局变量是静态存储类型。

局部变量

0868bed92f524a21963e08076a95a148.png

 可以重复初始化。

0ad159128f0b424a942e92c6c01f0001.png

fc0a1e4fdd3243ef8bffd5df195310bf.png 

 但声明后,最好初始化,其实一般编译器不会报错,因为局部变量声明后,其里面是存在一个随机值的,但最好还是初始化一下,一般声音的同时,会把局部变量初始化为零。

全局变量和局部变量未初始化时

  1. 全局变量为0
  2. 局部变量为随机值。

这是因为全局变量属于静态存储类型,局部变量处于动态存储类型。

在来看看全局变量和局部变量的作用范围。

d304d5af58374c368a68ea96b5a65da6.png

 由图可知,全局变量的作用范围是整个程序,而局部边量作用范围是函数内部,也就是{}内部。

  1. 第一个x的打印是函数print_x,函数没有形参,它打印的x是全局变量,即打印800。
  2. 第二个x打印的是局部变量,有人说,既然全局变量的作用范围是整个文件,为什么不打印700,这其实关系到优先级问题,当局部变量名和全局变量名一致时,在函数内部定义的局部变量,使用时,优先级比全局变量高,也就是说,这时候优先打印局部变量。说优先也不对0fe04118ce9f40858183b0e4668bb4b5.png

 全局变量作用范围是整个文件,它有文件作用域,局部变量作用范围是函数内部,就是{}内部,它是块作用域,如果两个同名变量分别拥有文件作用域和块作用域,那么只有拥有块作用域的变量是可见的,而拥有文件作用域的变量会被隐藏,不可见,这就是为什么,在函数内部,直接打印x,其值会是800,而不是700。

  1. 进入for循环,又进入了一个新代码块,这时候有声明并初始话一个x,这个x同样拥有块作用域,对于for循环外的x,它的块作用域相较于for循环内的x就是文件作用域,故,打印的是for循环内的x值,而不是800。
  2. 当出了for循环,只有块作用域的x会从for循环中释放,下一个printf打印的是,拥有块作用域的800。

综上所述

  1. 局部变量是定义在函数内部的变量,作用只在函数体内部,拥有块作用域离开函数体就无效。
  2. 全局变量是定义在函数体外部的变量,作用的是整个文件,拥有文件作用域,作用域会整个程序,也就是所有的源文件,包括c和h文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值