Learning C++ 之 1.4d 变量的局部范围讲解

本文详细解释了在C++中变量的作用域与生命周期概念,包括局部变量何时创建和销毁,以及函数参数的有效区间等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在1.3中已经学习了CPU执行如下语句的过程:int x;这个过程叫做变量的实例化(创建)

所以问题就来了,“什么时候一个实例化的变量销毁呢?”

销毁的时机:

一个变量的适用范围取决于该变量初始化的时候。函数的参数和函数内部的变量都有局部的适用范围。就是说这些变量只有在这些定义它的函数内部有效。局部变量开始生效的时间就是定义的时候,销毁的时间就是函数执行结束的时候(通常是在函数的最后面)。

下面是一个简单的例子:

#include <iostream>
 
int main()
{
    int x; // variable x is created here
    std::cout << "Enter a value for x: ";
    std::cin >> x;
    std::cout << "You entered: " << x << std::endl;
 
    return 0;
} // variable x is destroyed here

下面是一个稍微复杂点的例子:

#include <iostream>
 
int add(int x, int y) // x and y are created here
{
    // x and y are visible/usable within this function only
    return x + y;
} // x and y go out of scope and are destroyed here
 
int main()
{
    int a = 5; // a is created and initialized here
    int b = 6; // b is created and initialized here
    // a and b are usable within this function only
    std::cout << add(a, b) << std::endl; // calls function add() with x=a and y=b
    return 0;
} // a and b go out of scope and are destroyed here

在add()函数里,x和y创建的时机就是函数被调用的时候,x和y的有效区间就是在add函数内部,销毁的时机在add函数调用完成之后。

变量啊a和b在main()函数里面,创建的时机就是定义的时候,销毁的时机就是main()函数执行完成的时候。

为了加强你的理解,我们一步步地跟踪一下代码:

  • main()函数被触发
  • main()函数中的变量a被初始化,并赋值5
  • main()函数中的变量b被初始化,并赋值6
  • add()函数被调用,a,b作为参数传入
  • add()中的变量x被创建,并赋值5
  • add()中的变量y被创建,并赋值6
  • +运算符将x和y相加得到11
  • 通过return语句将11返给main()函数
  • add函数中的x和y被销毁
  • main函数打印11到输出平台上
  • main函数返回0给操作系统
  • main的a和b变量被销毁

由此可见,如果add()函数被调用两次,那么变量x和y也会创建和销毁两次。

上面的例子中可以明确地看到x和y变量与a和b变量是不同的。

下面看一下另一个程序:

#include <iostream>
 
int add(int x, int y) // add's x and y are created here
{
    return x + y;
} // add's x and y go out of scope and are destroyed here
 
int main()
{
    int x = 5; // main's x is created here
    int y = 6; // main's y is created here
    std::cout << add(x, y) << std::endl; // the values from main's x and y are copied into add's x and y
    return 0;
} // main's x and y go out of scope and are destroyed here

在这个例子中,我们把main函数中的a和b变量改成了x和y,我们执行以下发现依然可以正常执行。即使add()函数和main()函数都有x和y变量。这是为什么呢?

首先我们需要明确尽管main函数和add函数中都有相同的变量x和y,但是这两对变量是有明显区别的。main函数中的变量和add函数中的变量毫无关系,知识名字相同而已。

其次,在main函数中,x和y指的是局部main函数中的变量,这两个变量只有在main函数中有效。而在add函数中的x和y变量代表的是函数的参数,只在add函数中有效。

简单地说,无论是main函数还是add函数有相同的变量名字,编译器都能明确地区分开这些变量。也就是说函数并不需要关系变量的命名名称,这对我们来说是非常明智简单的。

在后续的过程中,我们会深入地学习局部范围和其他形式的范围,可以参考第4章。

对于函数的参数或者内部变量来说,这些变量只针对该函数有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值