【问题标题】:Confusion in Scope and Life Time of a local variable in c/c++ [duplicate]c / c ++中局部变量的范围和生命周期混淆[重复]
【发布时间】:2015-09-26 03:41:50
【问题描述】:

我的问题是,当局部变量的生命周期处于块级时,为什么指针仍在块外打印局部变量的值

 #include<iostream>

  using namespace std;

int main(){

    int *p;
    {
        int n;
        n=5;
        p=&n;
    } 
    cout<<*p;
    return 0;
}

【问题讨论】:

标签: c++ c scope local-variables lifetime


【解决方案1】:

范围是指标识符的可用性。
生命周期是指对象在程序执行期间合法可访问的实际持续时间.它们是不同的东西。

您的代码有 undefined behaviour,因为对象 n 的生命周期在结束时结束 },因为您通过指针访问它。

一个简单的例子可能会更清楚:

#include<stdio.h>
int *func()
{
static int var = 42;
return &r;
}

int main(void)
{
int *p = func();
*p = 75; // This is valid.
}

这里,var 具有 static 存储持续时间。即它在程序终止之前一直存在。但是,变量var 的范围仅限于函数func()。但是var 甚至可以通过指针在func() 之外访问。这是完全有效的。

将此与您的程序进行比较。 n 具有自动存储持续时间,其生命周期和范围都限制在括号 { } 内。所以使用指针访问n是无效的。

但是,如果您将其 (n) 存储类更改为 static,那么您可以执行您所做的操作,因为该对象即使在括号外仍然是活动的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2016-12-27
    相关资源
    最近更新 更多