【基础知识】普通局部变量、普通全局变量、静态全局变量和静态局部变量

一、局部变量

定义:
    在一个函数内部定义的变量是局部变量,它只在本函数范围内有效

1、主函数main定义的变量也只在主函数有效

2、不同函数中可以使用名字相同的变量,它们代表不同的对象,互不干扰

3、形参也是局部变量

4、在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效

二、全局变量

定义:
    在函数外定义的变量是全局变量,全局变量可以为本文件中其他函数所共有,它的有效范围从定义变量的位置开始到本源文件结束。

1、设全局变量的作用:增加了函数间数据联系的渠道

2、建议不在必要的时候不要使用全局变量,因为

a.全局变量在程序的全部执行过程中都占用存储单元;

b.它使函数的通用性降低了;

c.使用全局变量过多,会降低程序的清晰性。

3、如果外部变量在文件开头定义,则在整个文件范围内都可以使用该外部变量,如果不在文件开头定义,按上面规定作用范围,只限于定义点到文件终了,如果定义点之前的函数想引用该外部变量,则应该在该函数中用关键字 extern ,作外部变量说明;

4、如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。

三、静态变量

1、静态变量的作用范围要看静态变量的位置,如果在函数里,则就是静态局部变量,作用范围就是这个函数;

2、静态全局变量,只在本文件可以用,虽然整个程序包含多个文件,但静态全局变量只能用在定义它的那个文件里,却不能用在程序中的其他文件里。它是定义存储因型为静态型的外部变量,其作用域是从定义点到程序结束,所不同的是存储类型决定了存储地点,静态型变量是存放在内存的数据区中的,它们在程序开始运行前就分配了固定的字节,在程序运行过程中,被分配的字节大小是不改变的,只有程序运行结束时,才释放所占用的内存。

四、区别

普通局部变量:存放在栈区,若不初始化内容则为随机值,只会在定义的语句块内有效,语句块结束之后变量空间就会被释放弹出。

普通全局变量:存放在内存全局区,若不初始化内容则默认为 0,进程结束空间才会被释放,能够被当前源文件或者其他文件使用。

注意:其他文件调用该全局变量,需要使用 extern 修饰。

静态局部变量:存放在全局区,不被初始化时内容则默认为 0,整个进程结束空间才会被释放,只能够在定义的语句块内有效。

静态全局变量:存放在内存全局区,不初始化时则默认为 0,整个进程结束空间会被释放,只能够被当前源文件使用。

(1)静态全局变量和普通全局变量的区别

全局变量的说明之前再加上 static,就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式,这两者在存储方式上并无不同。

这两者的区别在于,非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。

从以上分析可以看出,把局部变量改变为静态变量后,改变了它的存储方式,即改变了它的生存期;把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

(2)静态局部变量和普通局部变量的区别

静态局部变量只被初始化一次,下一次依据上一次结果值。

(3)静态函数与普通函数有什么区别?

静态函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(静态),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中有四种类型的变量局部变量全局变量静态局部变量静态全局变量。 1. 局部变量(Local Variables): 局部变量是在函数内部声明的变量,它们只在函数内部可见和访问。局部变量的作用域仅限于声明它们的函数内部。当函数执行完毕后,局部变量会被销毁,其占用的内存也会被释放。 2. 全局变量(Global Variables): 全局变量是在函数外部声明的变量,它们可以被程序中的所有函数访问。全局变量的作用域从声明开始的地方一直延伸到文件的末尾。全局变量在整个程序的执行过程中都是存在的,因此会占用内存。需要注意的是,在多个文件中使用同名的全局变量会导致冲突,因此应该避免这样的情况发生。 3. 静态局部变量(Static Local Variables): 静态局部变量普通局部变量相似,都是在函数内部声明。不同之处在于,静态局部变量只会在首次进入该函数时进行初始化,之后的函数调用不会重新初始化该变量。同时,静态局部变量的作用域仍然限制在声明它们的函数内部,但是其生命周期会延长到整个程序的执行过程。 4. 静态全局变量(Static Global Variables): 静态全局变量普通全局变量相似,都是在函数外部声明。不同之处在于,静态全局变量只能在声明它们的文件内部访问,其作用域被限制在当前文件范围内。其他文件无法访问该变量静态全局变量会在程序开始执行时进行初始化,并且在整个程序执行期间都存在。 以上就是C语言中四种不同类型的变量局部变量全局变量静态局部变量静态全局变量的特点和用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值