非初始化数组C ++中的随机数

时间:2016-04-24 04:58:36

标签: c++ arrays multidimensional-array

我在JavaScript中最喜欢做的事情之一是使用多维数组。我决定学习C ++,我想尝试使用数组来帮助我学习它。我制作了我的第一个C ++程序,将多维数组转换为基于文本的表。这是非常复杂的,花了我几个小时来弄清楚,主要是因为JavaScript中的数组与C ++中的数组有很大不同。我的程序会变成这样的数组:

int a[5][4] = {{44,0,1, 55555555}, {144,2,44444, 67}, {2,444,6, 99}, {3,44,7, 2}, {4,8,9444, 1000}};

进入这个:

--------------------------------
| 44  | 0   | 1     | 55555555 |
|-----+-----+-------+----------|
| 144 | 2   | 44444 | 67       |
|-----+-----+-------+----------|
| 2   | 444 | 6     | 99       |
|-----+-----+-------+----------|
| 3   | 44  | 7     | 2        |
|-----+-----+-------+----------|
| 4   | 8   | 9444  | 1000     |
|------------------------------|

令我困惑的是,当我没有初始化我的数组时,例如int a[5][4];,我的表格如下:

-------------------------------------------
| 1          | 0     | 1606416280 | 32767 |
|------------+-------+------------+-------|
| 0          | 1     | 0          | 0     |
|------------+-------+------------+-------|
| 1606416296 | 32767 | 0          | 0     |
|------------+-------+------------+-------|
| 0          | 0     | 0          | 0     |
|------------+-------+------------+-------|
| 0          | 0     | 0          | 0     |
|-----------------------------------------|

这些随机数来自哪里?

注意:这些数字不是来自我的代码,因为当我创建一个新项目并只添加数组int a[5][4]然后cout << a[0][2];的声明时,我得到了数字1606416280在控制台中。

3 个答案:

答案 0 :(得分:1)

在C ++中,堆栈变量未初始化,因此您输出的数字是之前存储在该内存地址的任何值(某些随机垃圾值)。

答案 1 :(得分:0)

打印未初始化的变量正在调用未定义的行为。用你自己的话说:

  

这些数字不是来自我的代码

你是对的 - 它们是垃圾值。要克服,您必须分配一些值,然后打印出这些值。但是,请注意,全局变量始终初始化为0,如in this SO question.

所指出的那样

答案 2 :(得分:0)

  

令我困惑的是,当我没有初始化我的数组时,例如INT   a [5] [4];,我的表格如下:

在C / C ++中,非初始化的内存区域被视为垃圾。你打印了一个非初始化的内存区域,即你打印垃圾。