2016-04-24 35 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++中,非初始化的內存區域被認爲是垃圾。您打印了一個未初始化的內存區域,即您打印的垃圾。