2016-04-24 75 views
-2

在JavaScript中我最喜欢做的事情之一是乱七八糟的多维数组。我决定学习C++,我想尝试一下数组来帮助我学习它。我让我的第一个C++程序将多维数组转换为基于文本的表格。这非常复杂,花了我几个小时才弄清楚,主要是因为JavaScript中的数组与C++中的数组有很大不同。我的计划会变成一个这样的数组:非初始化数组中的随机数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

回答

0

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

这些数字并非来自我的代码

你是正确的 - 他们是无用值。为了克服,你必须分配一些值,然后打印出这些值。然而,话虽如此,请注意,全局变量始终被初始化为0,正如指出的那样in this SO question.

1

在C++中,堆栈变量没有被初始化,所以输出的数字就是之前存储在内存地址的任何值(一些随机垃圾值)。

0

让我感到困惑的是,当我不初始化我的数组时,例如int a [5] [4];我的表如下所示:

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