Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу Вышел ли я за пределы массива?
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
koeltrad koeltrad вне форума
Member
 
Сообщений: 37
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.08.2021
По умолчанию Вышел ли я за пределы массива? - 07.09.2021, 14:43

Вышел ли я за пределы массива этим выражением arr[500]?
int main() {
char arr[1]= { 'h' } ;
printf("%d\n", arr[500]);
return 0;
}
Если не вышел, то значит массив расширился и стал равным 500 символам? Все неициализированные символы массива заполнились нулями.

А если вышел, то что после массива все ячейки приобретают значение 0 ?
То что ячейки в этом массиве заполнены нулями до 500 символа, кроме первого символа 'h' можно проверить оператором printf.
Как то нереально как это все ячейки после массива будут равняться нулям? Где тогда код храниться будет.
Ответить с цитированием
  (#2 (permalink)) Старый
wanja wanja вне форума
Member
 
Сообщений: 599
Сказал(а) спасибо: 1
Поблагодарили 30 раз(а) в 29 сообщениях
Регистрация: 08.05.2005
По умолчанию 07.09.2021, 17:20

Вышел, ведь индексы массива идут от 0 до 0.
Ответить с цитированием
Пользователь сказал cпасибо:
koeltrad (07.09.2021)
  (#3 (permalink)) Старый
koeltrad koeltrad вне форума
Member
 
Сообщений: 37
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.08.2021
По умолчанию 07.09.2021, 18:27

А как объяснить что пятисотый символ после массива имеет значение 0?
Можно управлять символами вне массива настройками этого массива?
Нули появились потому что здесь в квадратных скобках есть цифра char arr[1]
Если б цифры не было, то вместо нуля на пятисотом символе был бы случайный мусор.
Ответить с цитированием
  (#4 (permalink)) Старый
beroal beroal вне форума
Member
 
Сообщений: 155
Сказал(а) спасибо: 5
Поблагодарили 20 раз(а) в 20 сообщениях
Регистрация: 13.12.2002
По умолчанию 08.09.2021, 11:24

Цитата:
Сообщение от koeltrad Посмотреть сообщение
Можно управлять символами вне массива настройками этого массива?
В Си у массивов нет настроек. Длину массива, объявленного как
c Код:
char arr[1]
не возможно изменить.

Цитата:
Сообщение от koeltrad Посмотреть сообщение
А как объяснить что пятисотый символ после массива имеет значение 0?
Нули появились потому что здесь в квадратных скобках есть цифра char arr[1]
Если б цифры не было, то вместо нуля на пятисотом символе был бы случайный мусор.
Это не важно, что на практике вернуло выражение `arr[500]`. Вычислять `arr[i]`, если `i` находится за пределами массива, нельзя. Просто Си не проверяет `i`. Ваш код считается ошибочным независимо от того, какой результат он выдаёт, и ни один профессиональный программист не примет его в свою программу.
Ответить с цитированием
Пользователь сказал cпасибо:
koeltrad (09.09.2021)
  (#5 (permalink)) Старый
specsoftdevel specsoftdevel вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.06.2022
По умолчанию 12.06.2022, 20:25

Цитата:
Сообщение от koeltrad Посмотреть сообщение
А как объяснить что пятисотый символ после массива имеет значение 0?
Можно управлять символами вне массива настройками этого массива?
Нули появились потому что здесь в квадратных скобках есть цифра char arr[1]
Если б цифры не было, то вместо нуля на пятисотом символе был бы случайный мусор.
а ты попробуй запиши за пределы массива

посмтри под дизассамблером как там всё устроено, раз интересно. Все вопросы сразу отпадут)

Последний раз редактировалось Rius; 12.06.2022 в 20:44 Причина: Слияние
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вышел новый аудио-браузер (релиз) Talomir Софт 1 19.06.2020 13:40
БП вышел из строя Weel12 Блоки питания 3 14.03.2020 16:38
Вышел из строя слот озу. VspishkaMLG Память 11 24.07.2019 20:04
Меню программы съехало за пределы ее окна. Mishalka2010 Windows 8 0 13.12.2014 11:50
Поля стр выходят за пределы области печати. dmitrij0306 Принтеры 7 30.07.2013 17:20
windows 8 вышел?? Compino Windows 8 8 25.07.2011 12:23
БП вышел из строя. Spartaker Блоки питания 14 08.02.2011 17:52
Вышел финальный набор кодеков Win7codecs dsg Софт и программы 0 14.07.2009 12:28
Intel Core i7 вышел в продажу Артём Процессоры 22 21.11.2008 18:13
Индекс вышел за границы массива что делать Areostar .NET 1 21.07.2008 15:39
PaintBox как вывести курсор за пределы формы igor777 Delphi 2 30.05.2007 18:08
Как опредилить место где производится запись за пределы выделенного блока памяти sergeif Visual C++ 3 26.11.2002 11:48



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов