一篇文章带你了解C++ static的作用,全局变量和局部变量的区别

这里是详细讲解“一篇文章带你了解C++ static的作用,全局变量和局部变量的区别”的完整攻略。

1. 介绍

首先我们需要理解C++中的静态变量和全局变量以及它们与局部变量的区别。在程序开发中,正确地使用这些变量是很重要的。

  1. 全局变量:定义在函数外部,可以被程序中的所有函数使用。
  2. 静态局部变量:生存期是整个程序,但作用域是局部的。只在第一次进入该函数时初始化一次,以后函数再被调用,不再初始化。
  3. 普通局部变量:定义在函数内部的变量,作用域只在该函数内。

在C++中,static关键字可以用于静态变量、静态函数和静态成员变量。下面将重点介绍static关键字在变量声明中的用法和意义。

2. 静态变量

静态变量是指在函数中声明的变量,使用static关键字,具有以下特点:

  1. 它的生命周期与程序一致,只有在进程结束时该变量才会被销毁。
  2. 它只会被初始化一次,即使函数被多次调用,静态变量的值也不会丢失。
  3. 它的作用域只存在于声明它的函数内部。

以下是一个示例,展示了静态变量的用法:

#include <iostream>

void demo()
{
    static int j = 0; // 静态局部变量
    int i = 0; // 普通局部变量

    j++;
    i++;

    std::cout << "静态局部变量j的值为: " << j << std::endl;
    std::cout << "普通局部变量i的值为: " << i << std::endl;
}

int main()
{
    std::cout << "第一次调用函数demo:" << std::endl;
    demo();
    std::cout << "第二次调用函数demo:" << std::endl;
    demo();
    return 0;
}

输出:

第一次调用函数demo:
静态局部变量j的值为: 1
普通局部变量i的值为: 1
第二次调用函数demo:
静态局部变量j的值为: 2
普通局部变量i的值为: 1

可以看到,静态变量j只被初始化一次,每次调用函数demo时j的值都被保存了下来;而i的值在每次函数调用结束时都会被清除。

3. 全局变量

全局变量的生命周期从程序开始一直到程序结束,所有函数中都可以访问它们,但如果某个函数中有与全局变量同名的局部变量时,局部变量将会屏蔽全局变量,此时只能访问到局部变量。

以下是一个示例,展示了全局变量的用法:

#include <iostream>

int global_variable1 = 1; //全局变量

void demo(){
    int global_variable1 = 2; //局部变量,屏蔽了全局变量global_variable1
    int global_variable2 = 3; //局部变量,与全局变量global_variable2没有关系

    std::cout << "全局变量global_variable1的值为:" << ::global_variable1 << std::endl;
    std::cout << "局部变量global_variable1的值为:" << global_variable1 << std::endl;
    std::cout << "局部变量global_variable2的值为:" << global_variable2 << std::endl;
}

int global_variable2 = 4; //全局变量

int main(){
    demo();
    std::cout << "全局变量global_variable2的值为:" << global_variable2 << std::endl;
    return 0;
}

输出:

全局变量global_variable1的值为:1
局部变量global_variable1的值为:2
局部变量global_variable2的值为:3
全局变量global_variable2的值为:4

4. 总结

该攻略主要介绍了静态变量和全局变量的概念、用法和特点。在程序设计中,根据需求合理地使用这两种变量,可以提高程序的效率和灵活性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你了解C++ static的作用,全局变量和局部变量的区别 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++的替代:微软如何使用rust?

    C++的替代:微软如何使用Rust? Rust是一种系统级编程语言,它被称为C++的替代。它具有C++的高效和灵活性,同时也提供了强大的类型安全和内存安全保证。Microsoft正在积极使用Rust,以替代一些关键系统组件的底层编程语言。 使用Rust的原因 Microsoft决定使用Rust的主要原因是Rust的内存安全保证。内存相关的漏洞是造成系统崩溃和…

    C 2023年5月23日
    00
  • 自己的vscode-settings.json配置详解

    下面是关于“自己的vscode-settings.json配置详解”的详细攻略。 什么是vscode-settings.json? vscode-settings.json是VS Code配置文件,它存储了 VS Code 的所有设置选项。当你更改 VS Code 的设置选项时,实际上是修改了此 JSON 文件。通过默认的设置 UI,你无法更改的某些设置选项…

    C 2023年5月23日
    00
  • VC程序设计小技巧20例

    “VC程序设计小技巧20例”完整攻略 简介 VC程序设计小技巧20例是VC++程序设计中常用的技巧总结,适合于从事VC++开发者,主要包括优化技巧、调试技巧、安全技巧等。以下是详细的攻略总结。 1. 使用switch代替if语句 if语句在判断多个变量时效率低下,可以使用switch代替,代码如下: char c; cin >> c; switc…

    C 2023年5月23日
    00
  • C语言实现图的搜索算法示例

    C语言实现图的搜索算法示例 在C语言中,我们可以使用邻接矩阵或邻接表来表示图,实现图的搜索算法,本篇文章将详细介绍如何使用C语言实现图的搜索算法,以及提供两个示例说明。 邻接矩阵表示图 邻接矩阵是使用二维数组表示图的一种方法,其中数组的每个元素代表图中的一个节点,如果两个节点之间存在边,则数组元素的值为1,否则为0。例如,下面是一个由邻接矩阵表示的无向图。 …

    C 2023年5月23日
    00
  • C++ 中实现把EXCEL的数据导入数据库(ACCESS、MSSQL等)实例代码

    导入 Excel 数据到数据库的过程可以分为两步:读取 Excel 数据和将数据写入数据库。下面将分别进行说明。 读取 Excel 数据 安装必要的依赖包 shpip install pandas openpyxl 创建一个 Python 脚本,并导入 pandas 库 pythonimport pandas as pd 读取 Excel 文件 “`pyt…

    C 2023年5月22日
    00
  • win7、win8系统启动黑屏0xc000025错误的4种解决思路

    Win7、Win8系统启动黑屏0xc000025错误解决思路 问题描述 在启动Win7或Win8系统时,有时可能会遇到黑屏,并在屏幕上显示错误代码0xc000025。这种情况可能是由于系统文件损坏、磁盘问题、启动项问题等原因引起的。下面提供4种可能的解决思路。 解决思路一:重启系统 首先尝试重新启动系统,看看是否能够解决问题。有时候只是因为系统崩溃或者启动项…

    C 2023年5月30日
    00
  • Java编程二项分布的递归和非递归实现代码实例

    Java编程二项分布的递归和非递归实现攻略 什么是二项分布? 二项分布是离散分布中的一种,描述了在n次独立重复进行相同的随机实验中,恰好出现k次成功的概率。在很多领域中得到广泛的应用,例如统计学、质量控制、信号处理等等。 二项分布是由n和p两个参数所决定,其中n表示实验的次数,p表示每次实验成功的概率。用数学公式表示为: $$ P(X = k) = \bin…

    C 2023年5月22日
    00
  • rtmc.exe – rtmc是什么进程 有什么用

    首先,rtmc.exe是Realtek音频设备的管理程序,常驻在后台。它在Windows系统启动时自动启动,并且负责控制Realtek音频设备的相关设置和功能。 具体来说,rtmc.exe进程的作用有以下几点: Realtek音频驱动的控制。Realtek音频芯片需要使用rtmc.exe进程来控制设置。例如:音量控制、音效选择等等,都需要通过rtmc.exe…

    C 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部