C++ - 局部未初始化变量的值

标签 c++ scope

我正在编写一个简单的程序来测试变量范围的工作原理,但我得到了意想不到的结果,所以我希望你能帮助我理解它们。 我编译了这段代码

#include<iostream>
using namespace std;

void myFunction1()
    {
    int e;
    cout << e << endl;  
    e++;
    cout << e << endl<<endl;
    }

int main()
    {
    cout << "MAIN" << endl;
    int a,b,c,d;
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    cout << "c= " << c << endl;
    cout << "d= " << d << endl<<endl;
    cout << "MY_FUNC" << endl;
    myFunction1();
    myFunction1();
    myFunction1();
    }

并获得了这个输出

MAIN
a= -1617852976
b= 32767
c= 0
d= 0

MY_FUNC
32675
32676

32676
32677

32677
32678

所以,有两件事我真的不明白

1) 在 main() 函数中,我创建了 4 个 int 变量 (a、b、c、d),但没有对它们进行初始化,因此我希望它们在每次运行代码时都采用不同的值。奇怪的是,第一个变量 (a) 总是不同的,而其他变量总是采用相同的值 (b=32767, c=d=0)

2) 函数输出对我来说更陌生。 同样,我创建了一个变量 e 而不对其进行初始化,因此它第一次采用随机值(在示例中,e=32675)......然后,我将其增加一个,以便打印 32675 和32676,听起来不错。

但是为什么我第二次调用该函数时,e 保持以前的值 (32676)?我认为 e 是在我每次调用 myFunction1() 时创建的,并在函数结束时被删除,因此 e 每次都采用不同的随机值(因为我没有初始化它)。为什么即使变量超出范围也会存储 e 的值?

最佳答案

未初始化的原始值根本就没有定义。它们可以具有任何值。

关于C++ - 局部未初始化变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28798229/

相关文章:

c++ - 区分读取循环中的失败和文件结尾

c++ - 在 C++ 中编写两个原始类型之间的重载比较 (==)

c++ - 链接类构造函数时的范围问题

scope - 可以防止访问范围内声明的变量或作为函数参数的变量吗?

c++ - C++中的重载运算符

c++ - 索引的顺序影响 OPENGL 中的立方体结构

c++ - 使用 OCL 进行人脸检测 (OPENCV)

javascript - 分离函数时变量不记得自己

import - 如何在 Elixir 1.0.3 中引用函数中的模块变量而不引用其模块?在其父范围内?

angularjs - 在 $scope.$digest 之后立即触发事件