4、变量与静态变量

2024-09-07 09:04
文章标签 变量 静态

本文主要是介绍4、变量与静态变量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

变量与静态变量

  • 1、多个文件共享——全局变量+extern
  • 2、单个文件中的函数共享——static修饰的静态全局变量
  • 3、函数私有——局部变量和static静态局部变量
    • (1)局部变量
    • (2)static静态局部变量
  • 4、存储分布与存储期限

关键字作用
extern不改变作用域和生存期,只是用于声明该变量在其它文件中定义,使其在当前文件中可见,只能修饰全局的变量
static不改变作用域,修饰全局变量时,使其对其他文件不可见,作用域限制在本文件;修饰局部变量时,生存期从程序开始到程序结束,即使函数或代码块退出,静态局部变量也不会被销毁,而是保留其值
const不改变作用域和生存期,用于声明全局或局部常量,表明该值不可修改

1、多个文件共享——全局变量+extern

// add.cpp
#include "add.h"
int NUM1 = 5; // 对其他文件可见的全局变量,可以通过在其他文件中extern声明使用它
int NUM2 = 3;
int add() { return NUM1 + NUM2; }// main.cpp
#include <iostream>
#include "add.h"
using namespace std;
extern int NUM1;// 加extern,使用全局变量
extern int NUM2;
int main() {cout << NUM1 << " + " << NUM2 << " = " << add() << endl;return 0;
}

在这里插入图片描述

2、单个文件中的函数共享——static修饰的静态全局变量

// add.cpp对应部分修改为
static int NUM1 = 5; // 对其他文件不可见的static全局变量,只允许本文件使用,不可通过extern在其他文件中使用
static int NUM2 = 3;

static全局变量只允许本文件使用,对其他文件不可见,所以使用extern声明,仍然会出现未定义错误。在这里插入图片描述

3、函数私有——局部变量和static静态局部变量

(1)局部变量

#include <iostream>
using namespace std;
void foo() {int count = 0;  // 局部变量,离开作用域销毁count++;cout << count << endl;
}
int main() {foo();  // 输出:1foo();  // 输出:1foo();  // 输出:1return 0;
}

在这里插入图片描述

(2)static静态局部变量

#include <iostream>
using namespace std;
void foo() {static int count = 0;  // 静态局部变量,离开作用域仍然保存值,静态局部变量在程序第一次执行到该变量定义处时进行初始化,以后每次调用该函数时不会重新初始化。count++;cout << count << endl;
}
int main() {foo();  // 输出:1foo();  // 输出:2foo();  // 输出:3// cout << count << endl; // 错误,静态局部变量count作用域仍是foo函数,不过生存期为整个程序运行期间return 0;
}

在这里插入图片描述

4、存储分布与存储期限

  • 自动存储期限:存放在栈区的数据具有自动存储期限,生命周期随栈帧入栈开始,出栈结束。
  • 静态存储期限:数据拥有永久的存储单元,在程序整个执行期间都存在
  • 程序员管理:存放在上的数据,存储期限由程序员指定,看程序员合适释放。
#include <iostream>
using namespace std;
int a = 0;
static int b = 0;
const int c = 0;
static const int d = 0;
void foo() {static int e = 0;static const int f = 0;int g = 0;const int h = 0;cout << "静态局部变量e: " << hex << &e << endl;cout << "静态局部常量f: " << hex << &f << endl;cout << "局部变量    g: " << hex << &g << endl;cout << "局部常量    h: " << hex << &h << endl;
}
int main() {cout << "全局变量    a: " << hex << &a << endl;cout << "静态全局变量b: " << hex << &b << endl;cout << "全局常量    c: " << hex << &c << endl;cout << "静态全局常量d: " << hex << &d << endl;foo();return 0;
}

在这里插入图片描述

我们可以看到全局变量和静态变量在内存上很接近,这说明它们同属一片内存区域,具有静态存储期限。局部变量位于另一区域,具有自动存储期限。所以在局部变量前加static关键字,它的存储周期变为静态存储期限,在程序整个执行期间都存在。

在这里插入图片描述

这篇关于4、变量与静态变量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144642

相关文章

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

JS_变量

二、JS的变量 JS中的变量具有如下特征 1 弱类型变量,可以统一声明成var 2 var声明的变量可以再次声明 3 变量可以使用不同的数据类型多次赋值 4 JS的语句可以以; 结尾,也可以不用;结尾 5 变量标识符严格区分大小写 6 标识符的命名规则参照JAVA 7 如果使用了 一个没有声明的变量,那么运行时会报uncaught ReferenceError: *** is not de

C++/《C++为什么要有静态成员函数》

摘要        本文说明了什么是静态成员变量,什么是静态成员函数的概念,讨论了访问私有静态成员变量的三个方法。得出用静态成员函数访问静态私有成员变量是最佳方法即回答了“C++为什么要有静态成员函数“的问题。 类的静态成员 我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是

c++的静态变化!

静态成员   对于非静态成员,一个类的每个对象都自己存有一个副本,每个对象根据自己拥有的非静态的数据成员来区别于其他对象。而静态成员则解决了同一个类的多个对象之间数据和函数的共享问题。   静态数据成员   静态数据成员的作用是:实现同一类的不同对象之间的数据共享。   #include<IOSTREAM>   using namespace std;   class Po

本地如何快速启动静态服务器

本地快速启动静态服务器 有许多第三方库可以帮助你快速启动一个静态服务器,甚至无需编写代码。通过命令行运行这些库后,它们会自动启动一个服务器并打开指定端口,展示当前目录下的文件内容: 电脑得提前安装NodeJS 1、http-server http-server 是一个轻量级的命令行工具,允许你快速启动一个静态文件服务器。 安装 npm install -g http-server

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

axure之变量

一、设置我们的第一个变量 1、点击axure上方设置一个全局变量a = 3 2、加入按钮、文本框元件点击按钮文档框展示变量值。 交互选择【单击时】【设置文本】再点击函数。 点击插入变量和函数直接选择刚刚定义的全局变量,也可以直接手动写入函数(注意写入格式。) 这样点击按钮时就直接展示刚刚设置的全局变量3了。 2、更改变量值 在新建交互里点击设置变量值。 将a变量设置成等于10. 将新

shell脚本中变量中字符串替换的测试 /和//的区别

test_char=abbbcbbbf echo "bf:test_char = " $test_char test_char=${test_char/bbb/ddd} echo "af:test_char = " $test_char 输出: bf:test_char =  abbbcbbbf af:test_char =  adddcbbbf 只匹配第一个

eclipse中相同变量显示变色设置

java文件的设置"Window"-"preferences"-"Java"-"Editor"-"Mark Occurrences"复选框勾选 js文件的设  置"Window"-"preferences"-"web"-"javascript"-"Mark Occurrences"复选框勾选 。