全局变量\静态全局变量\局部变量\静态局部变量

1.C++中静态全局变量和非静态全局变量区别与联系

  1. 静态全局变量(static全局变量)具有文件作用域,在声明的文件中可见,但在其他文件中不可见。非静态全局变量具有全局作用域,在整个程序中都可见。[普通全局变量在当前文件和程序中的其他文件都可见 而静态全局变量只在当前文件可见]
  2. 静态全局变量在程序开始时被初始化,只分配一次内存空间。非静态全局变量在声明时不会被初始化,其内存分配与函数调用方式有关。[普通全局变量声明时不会被初始化 静态全局变量在程序开始时被初始化,只分配一次内存空间]
  3. 静态全局变量的生存期与程序的生存期相同,即在程序结束时才会被销毁。非静态全局变量的生存期与程序的生存期相同,但是作用域在函数调用时结束。
  4. 静态全局变量默认为0,如果没有显示初始化,编译器会自动初始化为0或者空指针。非静态全局变量在声明时不会被初始化,如果没有明确赋初值,其值是不确定的

2.C++中静态局部变量和非静态局部变量区别与联系

区别:

  1. 静态局部变量:静态局部变量在函数内部定义,但是只被初始化一次。它的生存期从其声明处开始,一直持续到程序结束。即使函数执行完成,它的值也会被保留,下次调用该函数时可以继续使用。静态局部变量在内存中的地址不变,每次调用函数时都会使用同一个静态局部变量。静态局部变量的作用域仅限于定义它的函数内部。
  2. 非静态局部变量:非静态局部变量在函数内部定义,每次函数调用时都会被初始化,其生存期与函数的执行时间一致。非静态局部变量在每次函数调用时都会分配新的内存空间,每次调用时都有不同的地址。非静态局部变量的作用域仅限于定义它的函数内部。

联系:
无论是静态局部变量还是非静态局部变量,它们都是在函数内部定义的局部变量。它们的共同点是在声明它们的函数内部可见,只能在函数内部访问。不同的是,静态局部变量在每次函数调用时不会被重新初始化,其值会保留,下次调用函数时可以继续使用;而非静态局部变量在每次函数调用时都会重新初始化,其值不会被保留。此外,静态局部变量和非静态局部变量都在函数执行期间存在,函数执行完成后,它们的生存期也会结束。

3.C++中静态局部变量和静态全局变量区别与联系

区别:

  1. 静态局部变量是在函数内部定义的,作用域仅限于定义它的函数内部。而静态全局变量是在所有函数之外定义的,作用域为整个程序。
  2. 静态局部变量的生命周期从其声明处开始,一直持续到程序结束,即使函数执行结束也会保留其值。而静态全局变量的生命周期也是整个程序的生命周期。
  3. 静态局部变量在函数执行期间只被初始化一次,下次函数调用时会保持之前的值;而静态全局变量在程序启动时被初始化,只分配一次内存空间,其值在整个程序运行期间不会改变。

联系:
静态局部变量和静态全局变量都具有静态存储期和静态链接属性。它们的共同点在于:

  1. 都是在内存的静态存储区分配空间,不会随着函数的调用和退出而变化。
  2. 都有静态链接属性,即在声明它们的文件中可见,但在其他文件中不可见。

另外,在命名冲突的情况下,静态局部变量和静态全局变量可以通过使用static关键字来解决冲突,即使它们的名字相同,也不会冲突。

4.C++中局部变量和全局变量区别与联系

区别:

  1. 作用域:局部变量的作用域仅限于定义它的局部范围(函数、代码块等),只能在其定义的范围内被访问。全局变量的作用域是整个程序,可以在程序的任何地方被访问。
  2. 生命周期:局部变量的生命周期仅限于其定义所在的作用域,在离开作用域时被销毁。全局变量的生命周期从程序启动到程序结束,即在整个程序运行期间保持存在。
  3. 初始化:局部变量可以选择是否进行初始化,如果没有初始化,其值是未定义的,需要手动初始化。全局变量可以进行初始化,如果没有显示初始化,编译器会自动初始化为默认值(数值型为0,指针型为nullptr)。

联系:
局部变量和全局变量都是用于存储数据的变量,可以在程序中进行访问和修改。
全局变量和局部变量都可以在其作用域内进行访问和修改。
全局变量和局部变量都可以通过传参的方式在函数之间进行数据传递。
在命名冲突的情况下,可以使用作用域解析运算符(::)来访问全局变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿猿收手吧!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值