C++笔记一(全局变量、局部变量、静态局部变量)

一、生存期

1. 静态生存期:

  • 静态生存期是指程序运行期间始终保留的对象,这些对象通常定义在程序的作用域之外(即全局作用域),并存在于程序的整个运行过程中,直到程序结束。

2. 动态生存期:

  • 动态生存期是指在程序运行期间动态分配的对象,这些对象需要在运行时手动创建和销毁。动态生存期的对象通常包括在堆上分配的对象和lambda函数等。

二、全局变量

  • 全局变量是在程序main函数之外定义的变量,它们可以在整个程序中使用。全局变量可以是静态的或非静态的,可以在定义时进行初始化,也可以在定义之后进行初始化。由于全局变量具有全局范围和生命期,因此它们通常在整个程序的不同部分中使用,以在程序的多个地方存储相同的信息。
  • 静态全局变量仅初始化一次,其值在整个文件中都是可见的
  • 动态全局变量在堆上动态分配内存,内存分配和释放是在程序运行期间进行的;整个工程可见,需添加extern进行声明
#include <iostream>
using namespace std;

int globalVar = 10; // 静态全局变量

void foo() {
    int* dynamicGlobalVar = new int(20); // 动态全局变量
    cout << "动态全局变量的值:" << *dynamicGlobalVar << endl;
    delete dynamicGlobalVar;
}

int main() {
    cout << "静态全局变量的值:" << globalVar << endl;
    foo();
    return 0;
}
静态全局变量的值:10
动态全局变量的值:20

三、动态局部变量

  • 动态局部变量具有动态生存期,存放在栈区,生命周期在其包含语句块执行结束时便结束
  • 每次进入函数时都会初始化
  • 作用域为函数和代码块

四、静态局部变量

  • 存放在静态数据区,生命周期一直延续到整个程序执行结束
  • 只第一次进入函数时被初始化
  • 作用域为函数和代码块

实例

#include <iostream>
using namespace std;
int i = 1; // i 为全局变量,具有静态生存期。
int main(void) {
  static int a; // 静态局部变量,有全局寿命,局部可见。
  int b = -10;  // b, c为局部变量,具有动态生存期。
  int c = 0;
  void other(void);
  cout << "---MAIN---\n";
  cout << " i: " << i << " a: " << a << " b: " << b << " c: " << c
       << endl; // 1 0 -10 0
  c = c + 8;
  other(); // 33 4 0 15
  cout << "---MAIN---\n";
  cout << " i: " << i << " a: " << a << " b: " << b << " c: " << c
       << endl; // 33 0 -10 8
  i = i + 10;
  other(); // 75 6 4 15
  other(); // 107 8 6 15
  
  return 0;
}
void other(void) {
  static int a = 2;
  static int b;
  // a,b为静态局部变量,具有全局寿命,局部可见。
  //只第一次进入函数时被初始化。
  int c = 10; // C为局部变量,具有动态生存期
  //每次进入函数时都初始化。
  a = a + 2;
  i = i + 32;
  c = c + 5;
  cout << "---OTHER---\n";
  cout << " i: " << i << " a: " << a << " b: " << b << " c: " << c << endl;
  b = a;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值