Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Различие инициализаций 
V
    Опции темы
Adeptus
  Дата 19.11.2013, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.11.2013

Репутация: нет
Всего: нет



Здравствуйте.
Язык C.
Возникла проблема с пониманием книги: в книге написано есть 2 способа инициализации массива:
1) 
Код

int mas[10] = {0,1,2};

2) 
Код

int mas[10];
mas[0] = 0;
mas[1] = 1;
mas[2] = 2;


В книге написано, что при первом способе первые 3 элемента принимают значения, а остальные устанавливаются в нуль.

А во втором способе устанавливается значение первых 3 элементов, а в остальном мусор - мы не знаем что там может быть.

Почему? Разве в 2-ух случаях не происходит инициализация? Почему они должны различаться? И чем они различаются.

Спасибо.

Это сообщение отредактировал(а) Adeptus - 19.11.2013, 09:15
PM MAIL   Вверх
vinter
Дата 19.11.2013, 09:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Перввый случай эквивалентен: 
Код

int mas[10] = {0,1,2,0,0,0,0,0,0,0};

Во втором ты явно копируешь несколько целых в массив. Второй случай вообще не инициализация, а присваивание. Во втором случае твой массив инициализирован мусором, а потом ты уже некоторые элементы присваиваешь. Можешь написать так:
Код

int mas[10] = {};

И весь массив будет инициализирован нулями


--------------------
Мой блог
PM MAIL WWW   Вверх
Adeptus
Дата 19.11.2013, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.11.2013

Репутация: нет
Всего: нет



vinter, то есть инициализация может быть только одна, то есть
Код

{}

PM MAIL   Вверх
bsa
Дата 19.11.2013, 09:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Более того, если массив глобальный, то вне функций его инициализировать можно только первым вариантом.
PM   Вверх
vinter
Дата 19.11.2013, 09:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Если не затрагивать новшеств в языке, то инициализацию легко отличить по наличию типа в строке. Т.е. там где ты объявляешь переменную ты приводишь её тип(int mas[10]). Если ты добавляешь сюда какую либо инициализирующую конструкцию(в данном случае массив, поэтому {...}) то получаешь инициализацию. Если же нет, то ты оставляешь свою переменную не инициализированной. Все последующие к ней обращения уже не являются  инициализацией. 
Всё вышеописанное справедливо для локальных переменных(включая массивы) встроенных типов. В этом и есть разница между объявлением и определением, касательно встроенных типов. Определение это объявление с инициализацией.

Всё это утрированно и не полно. Но должно быть достаточно на первое время.


--------------------
Мой блог
PM MAIL WWW   Вверх
Adeptus
  Дата 19.11.2013, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.11.2013

Репутация: нет
Всего: нет



bsa,
vinter, Спасибо, все понал.

Удачи. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.