C++-静态局部变量

简介: C++-静态局部变量

特征:

1.需添加关键字static。


2.在静态存储区分配内存,始终存在直到程序结束。


3.作用域为局部,在哪个函数或者语句块内声明,则只在其内有用。


4.编译时赋初值,后续运行时再赋值没用,而是根据上次执行结束的值进行后续的操作。


5.若没初始化赋初值,则编译时自动设为0或空。

测试代码:

#include <iostream>
using namespace std;
void test1()
{
  static int t1 = 5;
  cout << "t1_1:" << t1 << endl;
  t1++;
  cout << "t1_2:" << t1 << endl;
}
void test2()
{
  int t2 = 0;
  cout << "t2_1:" << t2 << endl;
  t2++;
  cout << "t2_2:" << t2 << endl;
}
void test3()
{
  static int t3;
  cout << "t3_1:" << t3 << endl;
  t3++;
  cout << "t3_2:" << t3 << endl;
}
int main()
{
  for (int i = 0; i < 4; ++i)
  {
    cout << i << ":" << endl;
    test1();
    test2();
    test3();
    cout << endl;
  }
  system("pause");
}

测试结果:

0:
t1_1:5
t1_2:6
t2_1:0
t2_2:1
t3_1:0
t3_2:1
1:
t1_1:6
t1_2:7
t2_1:0
t2_2:1
t3_1:1
t3_2:2
2:
t1_1:7
t1_2:8
t2_1:0
t2_2:1
t3_1:2
t3_2:3
3:
t1_1:8
t1_2:9
t2_1:0
t2_2:1
t3_1:3
t3_2:4


总结:

      t1是静态局部变量,初始化为5,后续的4次循环中,每次都加一,即使每次循环中都有static int t1 = 5;这一步,但实际上并未赋值为5,而是继续使用上一次调用结束时的值。


      t2是普通局部变量,初始化为0,后续的4次循环中,每次都加一,那它就真的每次都只是从0加到1。


      t3也是静态局部变量,与t1不同之处在于没有人为给定初始化的值,那它自动设为0,运行的特征同t1也是一样的。


      如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

相关文章
|
2月前
|
存储 缓存 安全
【C/C++ 关键字 存储类说明符 】 线程局部变量的魔法:C++ 中 thread_local的用法
【C/C++ 关键字 存储类说明符 】 线程局部变量的魔法:C++ 中 thread_local的用法
34 0
|
8月前
|
C++
39.【C/C++ 全局变量和局部变量 (详解)】
39.【C/C++ 全局变量和局部变量 (详解)】
56 0
|
C++
【C++】局部变量和全局变量
有关C++局部变量和全局变量的记录
95 0
【C++】局部变量和全局变量
|
C++ 索引
C++ 在函数中使用静态局部变量,让函数返回数组
C++ 在函数中使用静态局部变量,让函数返回数组
216 0
C++ 在函数中使用静态局部变量,让函数返回数组
C/C++中static局部变量的注意事项
C/C++中static局部变量的注意事项
180 0
|
C++
C/C++ 全局变量和局部变量的大小限制
局部数组变量和全局数组变量的大小限制
2829 0
|
存储 C++ 编译器
C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
static 有两种用法:面向过程程序设计中的static 和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明 static 在类中的作用。    一、面向过程设计中的static    全局变量、局部变量、静态全局变量、静态局部变量的区别   C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。
1892 0
|
1天前
|
编译器 C语言 C++
c++初阶------类和对象(六大默认构造函数的揭破)-3
c++初阶------类和对象(六大默认构造函数的揭破)
|
1天前
|
编译器 C语言 C++
c++初阶------类和对象(六大默认构造函数的揭破)-2
c++初阶------类和对象(六大默认构造函数的揭破)
|
1天前
|
存储 编译器 C语言
c++初阶------类和对象(六大默认构造函数的揭破)-1
c++初阶------类和对象(六大默认构造函数的揭破)