2016-04-24 20 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 а [5] [4] ;, мой стол выходит так:

В C/C++ не инициализируется область памяти считается мусором. Вы напечатали не инициализированную область памяти, то есть вы напечатали мусор.

Смежные вопросы