Передача адреса переменной в функцию в Си
HTML-код
- Опубликовано: 12 сен 2024
- По умолчанию параметры передаются по значению, то есть копируются.
Передаём функции параметр адресного типа.
Изменение переменной-параметра из функции.
Нельзя передавать адрес локальной переменной вне функции.
Курс молодого бойца по информатике (Язык Си).
cs.mipt.ru/c_intro
Отлично обьяснено! Спасибо!
С удовольствием бы послушал про подобную ситуацию, но уже когда мы передаём в функцию обьект лежащий на куче!
Хорошо бы объяснить почему НЕЛЬЗЯ возвращать АДРЕС ЛОКАЛЬНОЙ переменной. Например, рассказав про область видимости переменной и время жизни.
Локализовать переменную можно не только объявив ее в функции, но и просто окружив фигурными скобками (удобный прием).
@@hiler844 Саня шарит, он поправил.
Потому, что она будет уничтожена из стека при выходе из функции, указатель просто будет указывать на несуществующую более переменную😁😁😁
ну хоть кто-то объяснил как эти поинтеры использовать в функции, большое спасибо ))
Я не догнал почему программа падает. Мы вернули адрес локальной переменной, который должен указывать на стек. После возврата того фрейма в стеке уже нет, но адреса то наши, я ожидал, что будет выведено либо 888, если память не затерлась ещё, либо другое число если содержимое по адресу изменилось.
10:20 как же я заорал))
Спасибо. Когда нибудь я пойму эти указатели😂
Спасибо за уроки!
Программируя на Си, пятаком ты не тряси! 🤫
10:30 моя жизнь никогда не будет прежней.. до этого дня я только никогда не бросал сцепление..
Годнотаа!) Спасибо Тимофей!)
А если локальную переменную внутри foo объявить static?
отвечу сам себе же. попробовал со статиком. как и должно быть компилятор не ругается и из main дотягиваюсь до cодержимого переменной объявленной static как до глобальной.
спасибо)) супер инфа
а почему не использовать в таком случае глобальные переменные вместо работы через указатель?
Глобальные переменные - зло. Почему? - в интернете достаточно информации.
Можно использовать и глобальные переменные
Но у каждого подхода есть плюсы и минусы
1) указатели - переменные могут быть только как средство обмена между несколькими функциями и их никто не поменяет где-то без вашего контроля
2) глобальные переменные - удобны при передачи и хранении некого состояния системы где нужно использовать сразу 20-100 переменным, пропихивать их через функцию к функции через указатели - просто не рационально
Выгоднее завести класс // но если класс будет доступен везде и всем - это мало отличается от глобальных переменных. Разве что порядка больше при организации большого числа переменных, но и писанины кода тоже больше.
foo - ААААААААА как мне это знакомо!!!! Не преобразование типа, а привидение типа! Так стоп, с этого места подробнее - как это в Си нету ссылок - чистом! Уже отменили? Потрудитесь обьяснить Ваше утвержедение!
Для объяснения реально надо 10 минут?
Почему, когда я передаю строку "abc" в функцию, которая имеет параметр указатель, я не указываю с ней &?
Потому что имя функции это указатель на нулевой елемент массива
@@romkagm7756 Имя функции или имя параметра?
Visual Studio 2019 пишет warning о локальной переменной, но программа не падает, а выдает что *py = 888. Что в ней изменилось?
Ничего не изменилось, это нормально
Я тоже не понял почему программа падает. Мы вернули адрес локальной переменной, который должен указывать на стек. После возврата того фрейма в стеке уже нет, но адреса то наши, я ожидал, что будет выведено либо 888, если память не затерлась ещё, либо другое число если содержимое по адресу изменилось.
Все из за чертового кеширования.
Это шутка
Это понятно, что адрес локальной переменной не возвращается. Ведь локальная переменная перестает существовать, по завершении функции, а значит и адреса никакого уже нет.
С чего бы адрес перестал существовать?
+
Что за нездоровая любовь к функции с именем "фу"? Назовите f или религия не позволяет?
читать что-то кроме документации (например истории) умеем или религия не позволят?
en.wikipedia.org/wiki/Foobar