数组指针的影响

时间:2012-11-16 13:07:48

标签: c++ arrays memory pointers

当我们有:

#include <iostream>
using namespace std;

int main()
{
    int a[100];
    cout << a[0] << endl;
}

我得到“1”。

但是当我改变它时:

#include <iostream>
using namespace std;

int main()
{
    int a[100];
    int* b = &a[0];
    cout << a[0] << endl;
    cout << *b << endl;     
}

我得到类似“-1219451320”的内容,每次运行后都会发生变化。

b变量的影响是什么,a[0]变了?例如,现在,如果我将其更改为以前的代码,结果将再次为“1”。

在这两种状态下,阵列都没有初始化!所以不应该有这样的差异。例如在第一个代码中,如果我们得到“-12242311231”,它就不会奇怪但是现在......

1 个答案:

答案 0 :(得分:5)

您尚未初始化数组,因此值为(或可以)任意

标准称他们为不确定值

使用两个不同的程序,您可以获得两个不同的值或相同的值,没有可辨别的模式或原因(它是任意的)。您甚至可以从相同程序的两次运行中获得不同的值。要初始化,只需写

int a[100] = {};  // All zeroes. :-)

请考虑使用 std::vector ,而不是原始数组,例如

#include <vector>

// ...
std::vector<int> a( 100 );    // All zeroes

它会自动初始化。

它也可以调整大小。