C++入门(小白篇3—变量的作用域&常量的定义)

前言

再上一节课中,我们学习了C++中标识符的定义、关键词的认识,变量的类型、如何定义变量

在本节课中,我们一起学一下,变量的作用域

所谓变量的作用域,说白了,就是一个变量在代码中的某个区域,使用是否生效

每天学一点

本篇转自【菜鸟教程—C++教程—C++变量的作用域

C++ 变量作用域

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

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

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

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

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

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

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

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

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

局部变量

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

#include <iostream>
using namespace std;
 
int main ()
{
  // 局部变量声明
  int a, b;
  int c;
 
  // 实际初始化
  a = 10;
  b = 20;
  c = a + b;
 
  cout << c;
 
  return 0;
}

上述代码中的 a、b、c就是局部变量,因为在函数main()中所声明、并定义;

python版

def main():
    a = 10
    b = 20
    c = a + b
    print(c)
main()

全局变量

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

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

#include <iostream>
using namespace std;
 
// 全局变量声明
int g;
 
int main ()
{
  // 局部变量声明
  int a, b;
 
  // 实际初始化
  a = 10;
  b = 20;
  g = a + b;
 
  cout << g;
 
  return 0;
}

这里的g就是一个全局变量,因此可以在函数中进行修改

Python版

g = 0
def main():
    a = 10
    b = 20
    g = a + b
    print(g)
main()

在这里其实大家也发现了,Python和C++的一写区别,比如在python代码中,我都没有声明变量类型,而是直接赋值

所以这也就引申出一个问题,在C++中声明一个变量,是否会有一个初始值,答案是有的

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

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

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

这也是为什么python定义变量这么好用的🤣

在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例:(这里我的理解是全局变量与局部变量互补干扰,并不是会覆盖全局变量的是,在python中如果要覆盖须加上*global*关键词)

#include <iostream>
using namespace std;
 
// 全局变量声明
int g = 20;
 
int main ()
{
  // 局部变量声明
  int g = 10;
 
  cout << g;
  cout << ::g;//这里也可以打印一下全局变量g的值
 
  return 0;
}

Python版

g = 20
def main():
    g = 10
    print(g)


main()
print(g)

【::】解释:

符号“::”在C++中叫做作用域限定符,我们通过“命名空间名称::命名空间成员”便可以访问到命名空间中相应的成员

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

#include <iostream>

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

python版

def main():
    a = 10
    def main2():
        a = 20
        print(a)
    print(a)
    main2()
if __name__ == '__main__':
    main()

类作用域

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

#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;
}

总结一下今天我们学习的内容是

1、认识C++中的变量的作用域的种类

2、如何定义局部变量以及全局变量

最后我们来讲一下,如何用局部变量去修改全局变量(每一行附带注释)

#include <iostream>
using namespace std;

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

// 这是一个名为modifyGlobal()的函数。函数中声明了名为g的局部变量,其值初始化为10。然后,使用::操作符访问全局变量g,并将其更新为局部变量g的值加上5.
void modifyGlobal() {
    // 声明同名的局部变量
    int g = 10;
    
    // 使用同名的局部变量修改全局变量
    ::g = g + 5;
}

int main() {
    cout << "初始全局变量值: " << g << endl;
    
    modifyGlobal();
    
    cout << "修改后的全局变量值: " << g << endl;
    
    return 0;
}
//这是main()函数,程序的入口点。在函数中,我们首先输出初始全局变量g的值。然后调用modifyGlobal()函数,该函数会修改全局变量g的值。最后,我们再次输出修改后的全局变量g的值。

在C++中,没有类似Python中的global关键字,但是我们可以直接在函数中访问和修改全局变量。因此,我们不需要使用global关键字,而是直接使用全局变量g。

Python版

g = 10
def main():
    global g
    g+=1
    print(g)
if __name__ == '__main__':
    main()
    print(g)

接下来我们学习在C++中常量的定义:

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。

常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。

常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

整数常量

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L

表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

下面列举几个整数常量的实例:

212         // 合法的
215u        // 合法的
0xFeeL      // 合法的
078         // 非法的:8 不是八进制的数字
032UU       // 非法的:不能重复后缀
85         // 十进制
0213       // 八进制 
0x4b       // 十六进制 
30         // 整数 
30u        // 无符号整数 
30l        // 长整数 
30ul       // 无符号长整数

浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。

当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时,

必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。

下面列举几个浮点常量的实例:

3.14159       // 合法的 
314159E-5L    // 合法的 
510E          // 非法的:不完整的指数
210f          // 非法的:没有小数或指数
.e55          // 非法的:缺少整数或分数

定义常量:

在 C++ 中,有两种简单的定义常量的方式:

1、使用 #define 预处理器。

2、使用 const 关键字。

1、#define 预处理器(常量变量名一般大写)

#include <iostream>
using namespace std;
 
#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'
 
int main()
{
 
   int area;  
   
   area = LENGTH * WIDTH;
   cout << area;
   cout << NEWLINE;
   return 0;
}

2、const 关键字(常量变量名一般大写)

#include <iostream>
using namespace std;
 
int main()
{
   const int  LENGTH = 10;
   const int  WIDTH  = 5;
   const char NEWLINE = '\n';
   int area;  
   
   area = LENGTH * WIDTH;
   cout << area;
   cout << NEWLINE;
   return 0;
}

下一节课内容我们学习,C++中【修饰符类型】、【储存类】

欢迎大家一起学习,本人也是今天刚刚学习,如有错误,请第一时间告知,我及时纠正!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一晌小贪欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值