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也是一样的。


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

相关文章
|
7月前
|
存储 程序员 C++
C++程序局部变量:生命周期与作用域的探讨
C++程序局部变量:生命周期与作用域的探讨
160 1
|
7月前
|
存储 缓存 安全
【C/C++ 关键字 存储类说明符 】 线程局部变量的魔法:C++ 中 thread_local的用法
【C/C++ 关键字 存储类说明符 】 线程局部变量的魔法:C++ 中 thread_local的用法
145 0
|
C++
39.【C/C++ 全局变量和局部变量 (详解)】
39.【C/C++ 全局变量和局部变量 (详解)】
87 0
|
C++
【C++】局部变量和全局变量
有关C++局部变量和全局变量的记录
134 0
【C++】局部变量和全局变量
|
C++ 索引
C++ 在函数中使用静态局部变量,让函数返回数组
C++ 在函数中使用静态局部变量,让函数返回数组
249 0
C++ 在函数中使用静态局部变量,让函数返回数组
C/C++中static局部变量的注意事项
C/C++中static局部变量的注意事项
205 0
|
C++
C/C++ 全局变量和局部变量的大小限制
局部数组变量和全局数组变量的大小限制
2924 0
|
存储 C++ 编译器
C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
static 有两种用法:面向过程程序设计中的static 和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明 static 在类中的作用。    一、面向过程设计中的static    全局变量、局部变量、静态全局变量、静态局部变量的区别   C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。
2018 0
|
19天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
29 2
|
25天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
59 5