С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 6
1

Инициализация массива C++

30.09.2014, 11:27. Показов 2585. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Почему, если мы не инициализируем переменную, то при попытке работы с ней будет ошибка
C++
1
2
3
4
5
int main(){
char x;
cout << x;
system("pause");
}
а если не инициализировать массив этого же типа, то там в каждой ячейке значение -52 или же ему соответствующая русская "М"?
C++
1
2
3
4
5
6
int main(){
setlocale(0, "");
char x[10];
cout << x[2];
system("pause");
}
Если тоже самое проделать с int, то в ячейке будет -858993460.
Второй день только изучаю C++, отсюда и такие тупые вопросы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2014, 11:27
Ответы с готовыми решениями:

Инициализация массива
Нужно объявить несколько статических строк, содержащих байты со значениями в диапазоне от 1 до 255...

Инициализация массива
Есть массив: int d; Есть константа бесконечности (просто константа) inf, равная 2^30. Я...

Инициализация массива
Здравствуйте! хм... сначала написал так. POINT p={00,00,10,10,10,10,10,10}; потом подумал, решил...

инициализация массива
Доброго времени. Инициализация массива с указанием размера 80 проходит гладко, при указании...

8
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
30.09.2014, 11:38 2
массив N переменных, это(если очень упростить) N блоков памяти подрят, каждый размером с переменную.
если int - 32бита.
Когда создается массив/переменная, в памяти просто выделяется кусок под него, и что там лежало(в зависимости от ряда факторов разное), то и лежит(в некоторых компилляторах по умолчанию таки инициализируется 0).
Так что при работе с неинициализированными данными полюбому возникнет, так называемое, undefined behaviour. Некоторые компилляторы генерируют предупреждение, некоторые ошибку....
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.09.2014, 11:47 3
Цитата Сообщение от gamer_surgut Посмотреть сообщение
то при попытке работы с ней будет ошибка
В Visual Studio собираешь? По стандарту это не ошибка, просто значение будет не инициализировано, т.е. мусор (и будет предупреждение при должных ключах компилятора)
Цитата Сообщение от gamer_surgut Посмотреть сообщение
а если не инициализировать массив этого же типа, то там в каждой ячейке значение -52
Массивы проверять слишком утомительно при компиляции. P.S. Хотя, лучше расскажи в какой среде собираешь и приведи конкретные сообщения ошибок.

Добавлено через 7 минут
Цитата Сообщение от Fallenworld Посмотреть сообщение
Так что при работе с неинициализированными данными полюбому возникнет, так называемое, undefined behaviour.
Отсутствие инициализации это не UB. См. 8.5/11
If no initializer is specified for an object, the object is default-initialized; if no initialization is performed, an
object with automatic or dynamic storage duration has indeterminate value.
Просто значение переменной неизвестно.
0
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
30.09.2014, 12:25 4
Цитата Сообщение от Tulosba Посмотреть сообщение
Просто значение переменной неизвестно.
значит результаты его обработки тоже будут неизвестны, это я имел ввиду.
0
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 6
30.09.2014, 12:44  [ТС] 5
Собираю в Visual Studio 13. То, что там будет "мусор", это понятно. Меня больше волнует вопрос, на который я так и не увидел ответа, почему при попытке обратиться к ячейке не инициализированного массива этого же типа не возникает ошибки о том, что массив не инициализирован, как при работе с обычной переменной, а выдает вполне конкретное значение, причем одно и тож е каждый раз, даже в разных программах (char arr[] - "M", int arr[] - -858993460)?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.09.2014, 13:00 6
Цитата Сообщение от gamer_surgut Посмотреть сообщение
почему при попытке обратиться к ячейке не инициализированного массива...
Для начала попробуй собрать и запустить программу в режиме релиза. Увидишь, что ошибки, которая была раньше, не будет. А суть в том, что IDE при сборке проекта в режиме отладки помогает выловить несколько больше неоднозначных ситуаций, чем в режиме релиза. Но и даже в этом случае не стоит рассчитывать на то, что диагностика ошибок (в данном случае использование неинициализированного массива) будет всеобъемлющей. C++ не тот язык, который будет исправлять ошибки программиста.
0
Fallenworld
01.10.2014, 10:18
  #7

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
C++ не тот язык, который будет исправлять ошибки программиста.
а что, есть языки, которые будут?

0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.10.2014, 10:26 8
Цитата Сообщение от Fallenworld Посмотреть сообщение
а что, есть языки, которые будут?
Есть языки, в которых инициализация переменных является обязательной, например C#:
http://ideone.com/9Tw1vV
0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
01.10.2014, 10:57 9
Цитата Сообщение от gamer_surgut Посмотреть сообщение
даже в разных программах (char arr[] - "M", int arr[] - -858993460)
В отладочном режиме все неинициализироанные переменные заполняются значениями (bin): 1100 1100 .....
0
01.10.2014, 10:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2014, 10:57
Помогаю со студенческими работами здесь

Инициализация массива
int ** mas, n; cout &lt;&lt; &quot;Введите порядок треугольника паскаля: &quot; &lt;&lt; endl; cin &gt;&gt; n; mas = new...

Инициализация комплексного массива
Подскажите как правильно проинициализировать элементы двухмерного комплексного массива. По заданию...

Инициализация массива объектов
Добрый вечер. не могу никак понять, почему массив объектов sampArray вмещает не четыре строки по...

Инициализация массива в классе
Как инициализировать массив в классе? Пишу такой код, но компилятор выдает: 9:53: error:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru