Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2012, 17:40   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию инициализация массива структуры

Здравствуйте.

Правильно ли я инициализирую массив структур клиентов нулями, чтобы не было глюков при последующем использовании?

Код:
client_structure clients[256];
memset(clients,0,256*sizeof(clients[0]));
Артэс вне форума Ответить с цитированием
Старый 01.10.2012, 19:01   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

В общем случае правильно, только не стоит использовать "магическое число" 256, объявите константу, определяющую размер массива, это позволит избежать ошибок в будущем, если размер массива будет изменён.
Код:
const size_t clients_size = 256;
client_structure clients[clients_size];
memset(clients, 0, clients_size * sizeof (clients[0]));
netrino вне форума Ответить с цитированием
Старый 01.10.2012, 21:41   #3
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Ещё один вариант, схожий с предыдущим

Код:
#define SIZE 256
client_structure clients[SIZE];
memset(clients, 0, SIZE * sizeof (clients[0]));
Axrik вне форума Ответить с цитированием
Старый 01.10.2012, 22:39   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Константы (вместе с inline-функциями) как раз и были придуманы, чтоб не использовать эти ужасные define. Если, конечно, мы не имеем дела с Си, где от них не спрятаться не скрыться.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 01.10.2012, 23:30   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

а что,
Код:
client_structure clients[256];
memset(clients,0,sizeof(clients));
религия запрещает писать? ну или
Код:
client_structure clients[256] = {};
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 01.10.2012, 23:47   #6
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Про client_structure clients[256] = {}; - не думал, что так можно и для структур.

Кстати, если что, я имею в виду язык Си, а не С++.

А при memset(clients,0,sizeof(clients)); разве не будет инициализирован только 1-ый элемент массива, а в остальных могут оставаться обрывки данных?
Артэс вне форума Ответить с цитированием
Старый 01.10.2012, 23:55   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Артэс
можно. не будет. книжку почитай по языку. 2 года назад спрашивал про сокеты, а сейчас про базу языка. странный ты.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.10.2012, 00:20   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
а что,
Код:
client_structure clients[256];
memset(clients,0,sizeof(clients));
религия запрещает писать?
Опасней с точки зрения возможных изменений исходника, например замены
массива на указатель с последующим дин. выделением памяти.
netrino вне форума Ответить с цитированием
Старый 02.10.2012, 00:21   #9
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Артэс

Правильно ли я инициализирую массив структур клиентов нулями, чтобы не было глюков при последующем использовании?

Правильно, но только в том случае, если все поля в этой структуре - простые (для подробностей гоогле C++ POD)

и, поскольку clients - это массив, а не указатель, как думают некоторые(((Ж, то можно проще:

memset(clients, 0, sizeof(clients));
Rififi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
Инициализация двумерного массива. Phoenixx Общие вопросы C/C++ 4 29.12.2011 18:17
инициализация массива parazzzitka93 Общие вопросы C/C++ 11 02.04.2011 21:01
Инициализация массива, являющегося полем структуры во время создания объекта Radser Общие вопросы C/C++ 10 18.01.2010 20:28
инициализация массива Arcueid1691 Паскаль, Turbo Pascal, PascalABC.NET 2 01.06.2009 02:36