c++ - 数组指针的影响

标签 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”,那并不奇怪,但现在......

最佳答案

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

标准称它们为不确定值

使用您拥有的两个不同的程序,您可能会得到两个不同的值或相同的值,没有明显的模式或原因(这是任意的)。您甚至可以从 同一 程序的两次运行中获得不同的值。要初始化,只需编写

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

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

#include <vector>

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

它始终自动初始化。

而且还可以调整大小。

关于c++ - 数组指针的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13417255/

相关文章:

c++ - 混合双重分派(dispatch)和静态多态性

c++ - C 和 C++ 中的图形

Java 将字符串数组插入文本文件

javascript - 将对象列表转换为嵌套的对象列表 javascript

java - 方法未返回数组的正确值。我究竟做错了什么?

Java (JNA API) - 计算基地址

java - java.util.concurrent 中的内存一致性

c++ - C++ 中的均值偏移实现

c++ - 如何允许用户重新配置编译器以与 cmake 一起使用?

java - 如何避免 java.lang.OutOfMemoryError : bitmap size exceeds VM budget in android while using a large bitmap?