![]() |
|
Модераторы: bsa |
![]()
|
|
| Adeptus |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.11.2013 Репутация: нет Всего: нет |
Здравствуйте.
Язык C. Возникла проблема с пониманием книги: в книге написано есть 2 способа инициализации массива: 1)
2)
В книге написано, что при первом способе первые 3 элемента принимают значения, а остальные устанавливаются в нуль. А во втором способе устанавливается значение первых 3 элементов, а в остальном мусор - мы не знаем что там может быть. Почему? Разве в 2-ух случаях не происходит инициализация? Почему они должны различаться? И чем они различаются. Спасибо. Это сообщение отредактировал(а) Adeptus - 19.11.2013, 09:15 |
||||
|
|||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
Перввый случай эквивалентен:
Во втором ты явно копируешь несколько целых в массив. Второй случай вообще не инициализация, а присваивание. Во втором случае твой массив инициализирован мусором, а потом ты уже некоторые элементы присваиваешь. Можешь написать так:
И весь массив будет инициализирован нулями |
||||
|
|||||
| Adeptus |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.11.2013 Репутация: нет Всего: нет |
vinter, то есть инициализация может быть только одна, то есть
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Более того, если массив глобальный, то вне функций его инициализировать можно только первым вариантом.
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
Если не затрагивать новшеств в языке, то инициализацию легко отличить по наличию типа в строке. Т.е. там где ты объявляешь переменную ты приводишь её тип(int mas[10]). Если ты добавляешь сюда какую либо инициализирующую конструкцию(в данном случае массив, поэтому {...}) то получаешь инициализацию. Если же нет, то ты оставляешь свою переменную не инициализированной. Все последующие к ней обращения уже не являются инициализацией.
Всё вышеописанное справедливо для локальных переменных(включая массивы) встроенных типов. В этом и есть разница между объявлением и определением, касательно встроенных типов. Определение это объявление с инициализацией. Всё это утрированно и не полно. Но должно быть достаточно на первое время. |
|||
|
||||
| Adeptus |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.11.2013 Репутация: нет Всего: нет |
bsa,
vinter, Спасибо, все понал. Удачи. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |