![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Что-то я не пойму. Вот, есть такой код:
Это же, вроде, означает, что при создании массива он заполняется значениями 0хFF, но у меня только pBuff[0] = 0xFF, остальные 0. В чем дело? |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
вроде тормозишь
воспользуйся лутше memset'ом |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Ну да. Можешь Сделать pBuff[128]={0xFF, 0xFF, /*вырезано*/ 0xFF}; массив будет заполнен 0xFF (кстати это не так тяжело как кажется - всего 7 selectов,cut,paste'ов, в vim'е такое вообще в шестьь клавиш делается - dd 128p) Хотя memset бесспорно рулит Это сообщение отредактировал(а) Mayk - 13.10.2005, 09:50 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Пол жизни обнулял массивы:
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
ну "обнулить" так можно только строку
хотя по моему гдето я тоже видел такую запись как у тебя но я предпочитаю пользоваться мемсетом |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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 -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
srd
|
|||
|
||||
| srd |
|
||||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Верно, потому-что для первого элемента инициализатор указан явно, а для остальных элементов используется в качестве инициализатора ноль. Собственно, это я и объяснял выше. -------------------- Не смей читать мою подпись!!! |
||||
|
|||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
srd
Если сделаю просто BYTE str[256];, то в дебаг режиме будет все 0хСС, а если BYTE str[256] = {0}; то нули |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
BYTE str[256];
Здесь вообще не указано инициализаторов и элементы массива никак не инициализируется, заполняются мусором. Значение 0xCC - это просто особенность MSVC++ при компиляции отладочной версии приложения и ни о чём не говорит. BYTE str[256]= {0}; Здесь указан инициализатор для первого элемента. Фича языка Си/Си++ - если указан хотя бы один инициализатор, то проинициализированы должны быть все элементы массива или все поля структуры. Но так как у нас инициализаторов меньше количества элементов (в примере - только один), то для оставшихся элементов в качестве инициализирующего значения используется ноль. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Но вот, BYTE str[256]= {0хFF}; вышесказанное не будет работать |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
А почему стандарт не читаете?
Это сообщение отредактировал(а) SergeCpp - 16.1.2007, 17:23 |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
SergeCpp
Покажи мне компилятор 100% соответвующий стандарту Ну, так это, объясни пожалуйста, мне темному, что по этому поводу говорит стандарт? |
|||
|
||||
| Neitron |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 580 Регистрация: 3.10.2005 Где: Москва Репутация: 2 Всего: 5 |
bel_nikita
.......................... -------------------- Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей. Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
bel_nikita
Я стандарт не читал и на С++ давно не пишу, но мне кажется srd всё нормально объяснил. Повторю: При наличии хотя бы одного инициализатора массив инициализируется сначала инициализаторами, насколько их хватит, а оставшееся место добивается нулями. Но чтобы не надеятся, я всегда делал memset. -------------------- Да. Именно так. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |