Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 23.06.2011, 12:21   #1
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Сообщение Интересность массивов

Вот код:
int main() {
    bool arr[0];
    cout << arr[0]; // вместо нулевого индекса может идти любой другой
    return 0;
}
Он выдает различные числа. Я понимаю, что если массив локален, и поэтому его ячейкам присваиваются какие-то случайные числа (кстати, почему это происходит?). Вопрос вот в чем: Получается, можно создавать массивы без ячеек? И получается, что если ты зайдешь за границу массива, то ошибки не будет?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Hagrael за это полезное сообщение:
den (23.06.2011), HolyDel (23.06.2011)
Старый 23.06.2011, 12:39   #2
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Интересность массивов

прикольно. я думал компилятор будет ругаться на нулевой размер. или хотя-бы предупреждение выдавать.

upd. хотя студия и выдает:
Сообщение от MS VS 2010: cl.exe
1>c:\users\holydel\documents\visual studio 2010\projects\test22\main.cpp(5): error C2466: cannot allocate an array of constant size 0
1>c:\users\holydel\documents\visual studio 2010\projects\test22\main.cpp(5): error C2133: 'array' : unknown size
кстати, почему это происходит?
потому, что память просто выделяется. какие там были значения - такие и будут у тебя в массиве.

твоя кстати запись более похожа на

bool *someptr;
cout<< *someptr;
врочем студия и на етот код ругается, тока уже ворнингом

Получается, можно создавать массивы без ячеек?
получается - зависит от компилятора.

И получается, что если ты зайдешь за границу массива, то ошибки не будет?
обязательно будет. причем в самое неудобное время - например - во время презентации заказчику
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
Hagrael (23.06.2011), moka (23.06.2011), mr.DIMAS (01.07.2011)
Старый 23.06.2011, 12:46   #3
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Интересность массивов

Большое спасибо!
(Offline)
 
Ответить с цитированием
Старый 23.06.2011, 14:29   #4
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Интересность массивов

в релизе может проскочить, в дебаге 100% крашнется
(Offline)
 
Ответить с цитированием
Старый 23.06.2011, 15:18   #5
L-ee-X
Разработчик
 
Аватар для L-ee-X
 
Регистрация: 06.06.2011
Адрес: Ирк. обл.
Сообщений: 541
Написано 133 полезных сообщений
(для 220 пользователей)
Ответ: Интересность массивов

Лично у меня компилятор ошибку выдает при таком обращение
(Offline)
 
Ответить с цитированием
Старый 23.06.2011, 19:28   #6
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Интересность массивов

В книге написано, что C++ специально не проводит проверку на то, есть ли посылаемый индекс в массиве, чтобы у программы была большая производительность (одной проверкой меньше). С этой же целью отсчет индексов у них начинается с нуля (т. к. тогда место ячейки массива находится по формуле y=arr+x*type, а не y=arr+(x-1)*type).
(Offline)
 
Ответить с цитированием
Старый 23.06.2011, 20:14   #7
12121
Нуждающийся
 
Регистрация: 26.12.2008
Сообщений: 57
Написано 22 полезных сообщений
(для 28 пользователей)
Ответ: Интересность массивов

Если выйдешь за границу массива - изменишь другие переменные. А какие именно - зависит от того как компилятор их расположил в памяти. Это под отладчиком можно увидеть.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Hagrael (23.06.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 04:35.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com