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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Касательно инициализации массива нулями 
V
    Опции темы
Nefalius
Дата 11.2.2011, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Стоит задача инициализировать массив нулями.
В данном случае есть неплохой вариант - a[10] = {0}.
Почему же народ для этих целей продолжает упорно использовать for'ы или memset'ы?
PM MAIL   Вверх
ChihPih
Дата 11.2.2011, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Такой способ не подойдет для массива, память для которого выделена динамически, вот и используют подобные функции.


--------------------
www.info-x.org - информационный ресурс о ОС FreeBSD. Форум.
PM MAIL WWW Jabber   Вверх
Nefalius
Дата 11.2.2011, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Извините за неполную формулировку в исходном посте. В том то и дело, что в коде, который я смотрю, память выделена статически smile

Код

char buf[8000];
char buft[20];

memset(buf, 0, 8000);
memset(buft, 0, 20);



Это сообщение отредактировал(а) Nefalius - 11.2.2011, 09:49
PM MAIL   Вверх
panter
Дата 11.2.2011, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Еще спроси почему люди используют до сих пор массивы вместо векторов.
PM MAIL ICQ Skype Jabber   Вверх
Игорь1024
Дата 11.2.2011, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 11.5.2009
Где: Дальний Восток

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



А иногда их просто нет. Писал я олимпиаду в одном обр. заведении, так там компиляторы плюсовые были чёрт знает какого года. (89 если не ошибаюсь).  smile 
--------------------
The God is real,unless he is declared as integer.
PM MAIL   Вверх
xvr
Дата 11.2.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Nefalius @ 11.2.2011,  09:48)
Извините за неполную формулировку в исходном посте. В том то и дело, что в коде, который я смотрю, память выделена статически smile

Код

char buf[8000];
char buft[20];

memset(buf, 0, 8000);
memset(buft, 0, 20);


Если этот код действительно такой, то memset тут применен исключительно из за недостатка знаний автора об исполнении С/С++ программ  smile Статические массивы (без инициализатора) протираются нулями при старте автоматически.

По поводу инициализации:
Код

void function()
{
  int big_array[1000000]={0};
}
этот код (если оптимизатор не сможет его оптимально обработать) потребует сделать где то (в константах программы) массив из 4М нулей, и скопировать его (run-time) в массив big_array в стеке (по поводу 4М массива в стеке пока замнем  smile )
Вариант из memset его будет на 4М короче (в файле), и немного быстрее

PM MAIL   Вверх
Nefalius
Дата 11.2.2011, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(xvr @ 11.2.2011,  12:53)

Статические массивы (без инициализатора) протираются нулями при старте автоматически.

Это текущий стандарт так продвинулся? VC2005 выдает мне классический "uninitialized local variable '' used", и, как и ожидалось мусор в неинициализированном элементе (если пропустить Run-time check конечно).

Цитата(xvr @ 11.2.2011,  12:53)

По поводу инициализации:
Код

void function()
{
  int big_array[1000000]={0};
}
этот код (если оптимизатор не сможет его оптимально обработать) потребует сделать где то (в константах программы) массив из 4М нулей, и скопировать его (run-time) в массив big_array в стеке (по поводу 4М массива в стеке пока замнем  smile )
Вариант из memset его будет на 4М короче (в файле), и немного быстрее

Спасибо smile Такого развернутого ответа и хотелось получить. Только в моем случае таких "искусственных" размеров не встречается, так, что думаю сойдет вариант с "{}".

Это сообщение отредактировал(а) Nefalius - 11.2.2011, 13:31
PM MAIL   Вверх
xvr
Дата 11.2.2011, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Nefalius @  11.2.2011,  13:29 Найти цитируемый пост)
Это текущий стандарт так продвинулся?
Со времен K&R так было

Цитата(Nefalius @  11.2.2011,  13:29 Найти цитируемый пост)
VC2005 выдает мне классический ворнинг "uninitialized local variable '' used"
Речь шла про статические переменные, не автоматические (т.е. не на стеке)


PM MAIL   Вверх
Nefalius
Дата 11.2.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(xvr @ 11.2.2011,  13:31)
Речь шла про статические переменные, не автоматические (т.е. не на стеке)

Пардон smile Сглупил.

Это сообщение отредактировал(а) Nefalius - 11.2.2011, 15:04
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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