C++教程(07)——变量作用域

news/2024/9/23 4:31:24/

一般来说有三个地方可以定义变量:

  • 在函数或一个代码块内部声明的变量,称为局部变量

  • 在函数参数的定义中声明的变量,称为形式参数

  • 在所有函数外部声明的变量,称为全局变量

作用域是程序的一个区域,变量的作用域可以分为以下几种:

  • 局部作用域:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。局部变量在函数每次被调用时被创建,在函数执行完后被销毁。

  • 全局作用域:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。全局变量在程序开始时被创建,在程序结束时被销毁。

  • 块作用域:在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。块作用域变量在代码块每次被执行时被创建,在代码块执行完后被销毁。

  • 类作用域:在类内部声明的变量具有类作用域,它们可以被类的所有成员函数访问。类作用域变量的生命周期与类的生命周期相同。

注意:如果在内部作用域中声明的变量与外部作用域中的变量同名,则内部作用域中的变量将覆盖外部作用域中的变量。

局部变量

在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。下面的实例使用了局部变量:

实例

#include <iostream> using namespace std;

int main ()

{ // 局部变量声明 int a, b; int c;

// 实际初始化 a = 10; b = 20; c = a + b;

cout << c; return 0; }

全局变量

在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。

全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。下面的实例使用了全局变量和局部变量:

实例

#include <iostream> using namespace std;

// 全局变量声明 int g; int main ()

{

// 局部变量声明 int a, b;

// 实际初始化 a = 10; b = 20; g = a + b; cout << g;

return 0; }

在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例:

实例

#include <iostream> using namespace std;

// 全局变量声明 int g = 20;

int main ()

{ // 局部变量声明 int g = 10;

cout << g;

return 0; }

当上面的代码被编译和执行时,它会产生下列结果:

10

初始化局部变量和全局变量

当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:

数据类型初始化默认值
int0
char'\0'
float0
double0
pointerNULL

正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果。


块作用域指的是在代码块内部声明的变量:

实例

#include <iostream>

int main() {
    int a = 10;
    {
        int a = 20;  // 块作用域变量
        std::cout << "块变量: " << a << std::endl;
    }
    std::cout << "外部变量: " << a << std::endl;
    return 0;
}

以上实例中,内部的代码块中声明了一个名为 a 的变量,它与外部作用域中的变量 a 同名。内部作用域中的变量 a 将覆盖外部作用域中的变量 a,在内部作用域中访问 a 时输出的是20,而在外部作用域中访问 a 时输出的是 10。

当上面的代码被编译和执行时,它会产生下列结果:

块变量: 20
外部变量: 10

类作用域

类作用域指的是在类内部声明的变量:

实例

#include <iostream>

class MyClass {
public:
    static int class_var;  // 类作用域变量
};

int MyClass::class_var = 30;

int main() {
    std::cout << "类变量: " << MyClass::class_var << std::endl;
    return 0;
}

以上实例中,MyClass 类中声明了一个名为 class_var 的类作用域变量。可以使用类名和作用域解析运算符 :: 来访问这个变量。在 main() 函数中访问 class_var 时输出的是 30。

类变量: 30

http://www.ppmy.cn/news/348018.html

相关文章

C++17新语法及标准库

1. New language features 1.1. New auto rules for direct-list-initialization 在C 17中&#xff0c;引入了一个新的auto规则来改进直接列表初始化&#xff08;direct-list-initialization&#xff09;的行为。在此前&#xff0c;使用auto声明变量并对其进行直接列表初始化…

【数据分享】2000-2021年全国1km分辨率的逐月PM2.5栅格数据(免费获取)

PM2.5作为最主要的空气质量指标&#xff0c;在我们日常研究中非常常用&#xff01;之前我们分享了2000-2021年全国范围1km分辨率的逐日的PM2.5栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;数据来自于Zendo平台&#xff01; 我们发现在Zendo平台上还…

显卡内存和计算机内存,电脑内存和显卡,吃鸡应该先升哪个?

原标题&#xff1a;电脑内存和显卡&#xff0c;吃鸡应该先升哪个&#xff1f; 说到显卡和内存哪个对游戏性能更重要&#xff0c;大多数人第一时间想到的都是显卡&#xff0c;但是显卡的发挥要建立在电脑内存足够的前提下&#xff0c;否则面临的问题就是闪退&#xff0c;再好的显…

e480换高分屏_ThinkPadE480笔记本(i5-8250u 8G内存 256G固态 高分屏0QCD 14英寸) 京东5799元...

ThinkPadE480是一款升级英特尔 酷睿i7 8代系列处理器的全新产品&#xff0c;轻薄纤巧的造型美入人心&#xff0c;这款产品最大的亮点就是它所搭载的Intel 酷睿i7 8550U 四核心/八线程处理器&#xff0c;拥有高达4GHz的最大睿频以及8MB三级缓存&#xff0c;理论性能强大到能够媲…

腾讯云4核8g服务器可支持多少人同时在线?4核8G并发量计算

腾讯云4核8G服务器可容纳多少人同时在线&#xff1f;4核8G服务器并发用户数多少&#xff1f;腾讯云4核8G服务器并发数计算需要考虑到服务器带宽、后端程序性能及CVM实例规格&#xff0c;4核8G服务器网来详细说下腾讯云服务器并发用户数计算&#xff1a; 腾讯云4核8G服务器并发…

浏览器上写代码,4核8G微软服务器免费用,Codespaces真香

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 一图胜千言 先上图&#xff0c;下面是欣宸在自己的iPad Pro上用浏览器写代码的实拍&#xff0c;右下方可见SpringBoot应用启动成功的日志 您可能会觉得平板配…

matlab笔记本8g够吗,【求助】Surface Pro 4,i5 4G 128G还是i5 8G 256G? - 笔记本电脑(Notebook)版 - 北大未名BBS...

在i5 8G和4G版之间犹豫很久了&#xff0c;主要看中surface的轻便和触屏 心理系硕士&#xff0c;需要用作主力机。看文献、上课记笔记、浏览网页、看视频听歌&#xff0c;软件方面 &#xff0c;Spss(常用)&#xff0c;Matlab(以后可能会用)&#xff0c; Photoshop(偶尔)&#xf…

mysql最大承载量_阿里云服务器4核8g并发数承载量计算看看能支持多少人在线?...

原标题:阿里云服务器4核8g并发数承载量计算看看能支持多少人在线? 阿里云服务器4核8G配置支持多少人同时在线?计算阿里云4核8G服务器并发数,阿里云4核8G服务器承载量需要考虑的是后端程序效率、公网带宽和4核8G服务器的ECS实例规格,云服务器吧来详细说下阿里云4核8G服务器…