当我删除一个std :: cout调用时,我从另一个std :: cout调用中获得了不同的输出。为什么?

时间:2019-10-20 10:52:05

标签: c++ arrays pointers memory stack

我有以下C ++源代码:

#include <iostream>

using namespace std;

int* ptr;

int main()
{
    {            
        int array[] = {1, 2, 3}; // <-- (1)
        ptr = &array[0]; // <-- (2)

        cout << *ptr << endl;
    } // <-- (3)

    cout << *ptr << endl; // <-- (4)

    return 0;
}

// Output:
// 1
// 1
  1. 我创建了一个由3个元素组成的数组。
  2. 我让“ ptr”指向数组的第一个元素。
  3. 我假设编译器将“数组”分配的内存标记为未签名。因此可以再次使用。但是数组中的数据仍然存在,因为它尚未被覆盖。
  4. 打印1,因为在“ ptr”指向的地址上仍然是“ array”的第一个元素的数据。

但是当我删除第一个提示时,我会得到完全不同的东西。

#include <iostream>

using namespace std;

int* ptr;

int main()
{
    {            
        int array[] = {1, 2, 3}; 
        ptr = &array[0]; 

        // cout << *ptr << endl;  <-- This is now a comment.
    }

    cout << *ptr << endl;

    return 0;
}

// Output:
// -2064455520

我误会什么?

0 个答案:

没有答案