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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BYTE pBuff[128] = {0xFF}; что же это значит? 
:(
    Опции темы
bel_nikita
Дата 13.10.2005, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Что-то я не пойму. Вот, есть такой код:
Код
BYTE pBuff[128] = {0xFF};

Это же, вроде, означает, что при создании массива он заполняется значениями 0хFF, но у меня только pBuff[0] = 0xFF, остальные 0.
В чем дело? smile Или я торможу с утра?



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
chaos
Дата 13.10.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



вроде тормозишь smile
воспользуйся лутше memset'ом smile
PM WWW   Вверх
Mayk
Дата 13.10.2005, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(bel_nikita @ 13.10.2005, 13:30)
Это же, вроде, означает, что при создании массива он заполняется значениями 0хFF, но у меня только pBuff[0] = 0xFF, остальные 0.

Ну да. Можешь Сделать pBuff[128]={0xFF, 0xFF, /*вырезано*/ 0xFF}; массив будет заполнен 0xFF
(кстати это не так тяжело как кажется - всего 7 selectов,cut,paste'ов, в vim'е такое вообще в шестьь клавиш делается -
dd 128p) smile

Хотя memset бесспорно рулит smile

Это сообщение отредактировал(а) Mayk - 13.10.2005, 09:50


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 13.10.2005, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Пол жизни обнулял массивы:
Код
BYTE pBuff[128] = {0};
А тут понадобилось заполнить 0xFF и такие вот, непонятки начались smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
chaos
Дата 13.10.2005, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



ну "обнулить" так можно только строку smile
хотя по моему гдето я тоже видел такую запись как у тебя
но я предпочитаю пользоваться мемсетом
PM WWW   Вверх
srd
Дата 13.10.2005, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


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

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



int a[2] = {1,1};
Массив из двух элементов, оба элемента равны 1.

int b[2] = {1};
Массив из двух элементов. Для первого элемента указано инициализируещее значение, а для второго нет. Компилятор подставляет для второго элемента 0. Т.е. эта строчка эквивалентна
int c[2] = {1, 0};

Другими словами, если указаны инициализируещие значения не для всех элеметов массива (или структуры), то для первых элементов массива (или полей структуры) используются указанные инициализирующие значения, а остальные заполняются нулями.

Потому и в твоей строке значение 0xff получает только первый элемент в строке.

// Здесь мы явно указали инициализирующее значение только для ПЕРВОГО элемента, а не для всех.
BYTE str[256] = {0};

Это сообщение отредактировал(а) srd - 13.10.2005, 10:17


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
bel_nikita
Дата 13.10.2005, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



srd
Цитата
// Здесь мы явно указали инициализирующее значение только для ПЕРВОГО элемента, а не для всех.
BYTE str[256] = {0};
Произойдет инициализация всего массива нулями


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
srd
Дата 13.10.2005, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


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

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



Цитата(bel_nikita @ 13.10.2005, 18:44)

Цитата

// Здесь мы явно указали инициализирующее значение только для ПЕРВОГО элемента, а не для всех.
BYTE str[256] = {0};

Произойдет инициализация всего массива нулями

Верно, потому-что для первого элемента инициализатор указан явно, а для остальных элементов используется в качестве инициализатора ноль. Собственно, это я и объяснял выше.



--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
bel_nikita
Дата 13.10.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



srd
Цитата
Верно, потому-что для первого элемента инициализатор указан явно, а для остальных элементов используется в качестве инициализатора ноль.
Почему в таком случае для остальных элементов используется в качестве инициализатора ноль?
Если сделаю просто BYTE str[256];, то в дебаг режиме будет все 0хСС, а если BYTE str[256] = {0}; то нули


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
srd
Дата 13.10.2005, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


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

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



BYTE str[256];
Здесь вообще не указано инициализаторов и элементы массива никак не инициализируется, заполняются мусором. Значение 0xCC - это просто особенность MSVC++ при компиляции отладочной версии приложения и ни о чём не говорит.

BYTE str[256]= {0};
Здесь указан инициализатор для первого элемента. Фича языка Си/Си++ - если указан хотя бы один инициализатор, то проинициализированы должны быть все элементы массива или все поля структуры. Но так как у нас инициализаторов меньше количества элементов (в примере - только один), то для оставшихся элементов в качестве инициализирующего значения используется ноль.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
bel_nikita
Дата 13.10.2005, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата
Фича языка Си/Си++ - если указан хотя бы один инициализатор, то проинициализированы должны быть все элементы массива или все поля структуры. Но так как у нас инициализаторов меньше количества элементов (в примере - только один), то для оставшихся элементов в качестве инициализирующего значения используется ноль.
Ничего не понял smile
Но вот, BYTE str[256]= {0хFF}; вышесказанное не будет работать


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
SergeCpp
Дата 13.10.2005, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


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

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



А почему стандарт не читаете?


Это сообщение отредактировал(а) SergeCpp - 16.1.2007, 17:23
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 13.10.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



SergeCpp
Покажи мне компилятор 100% соответвующий стандарту smile
Ну, так это, объясни пожалуйста, мне темному, что по этому поводу говорит стандарт? smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Neitron
Дата 13.10.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



bel_nikita
..........................


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
Дрон
Дата 13.10.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



bel_nikita
Я стандарт не читал и на С++ давно не пишу, но мне кажется srd всё нормально объяснил.

Повторю: При наличии хотя бы одного инициализатора массив инициализируется сначала инициализаторами, насколько их хватит, а оставшееся место добивается нулями.

Но чтобы не надеятся, я всегда делал memset.


--------------------
Да. Именно так.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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