Этюды для начинающих: Память 3. Динамические и автоматические переменные

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

stepan_sotnikov пишет:
То есть char * s = "ffff*" выполняется единожды и в s записываеться адрес начала массива. При повторном выполнении loop, в переменную записываеться адресс массива, но уже без присвоения.

Не так, конечно, ну, да Бог с Вами.

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Как, подскажи? Что происходит? Я по этому и формулирую свои умозаключения, что бы понять правильно я понял или нет.
Я бы понял если бы я пришел на форум и сказла, что я хочу из Арду сделать космический корабль с функцией машины времени, но мне не понятно как мигать светодиодом. 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

stepan_sotnikov пишет:
То есть char * s = "ffff*" выполняется единожды и в s записываеться адрес начала массива. При повторном выполнении loop, в переменную записываеться адресс массива, но уже без присвоения.

Ничего не делается "единожды".

Массив символов "ffff*" изначально (при компиляции) располагается в области данных и просто там живёт - это просто кусок памяти. Ничего в нём особенного. Компилятор предполагает, что содержимое этого куска памяти по идее не должно изменяться, а должно быть read-only потому этот элемент имеет квалификатор const.

При первом, втором и любом другом выполнении loop переменной s просто присваивается адрес этого куска памяти. Это всё. Больше не делается ничего. Первый проход от последующих не отличается ничем. Ничего там не делается "единожды", всё делается всегда строго одинаково.

Когда Вы пытаетесь присваивать адрес этого блока памяти обычному (не const) указателю, компилятор понимает. что это может привести к порче read-only данных и предупреждает Вас об этом. Но только предупреждает, а не запрещает, т.к. язык С++ - он "для больших мальчиков", которые знают что делают, и которых не надо постоянно бить по рукам "туда не лезь", "то не трогай".

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Да спасибо огромное. Я так и понял просто криво изложил мысль.
"Выполняется единожды" я и имел ввиду при компиляции как вы и сказали.
Спасибо за разъяснения. Буду дальше изучать Ваши Этюды.
Глядишь еще через 2 месяца я научусь мигать наконец то =))