Передача параметров в функцию по ссылке. Разница между ссылкой и указателем. Урок #51
Vložit
- čas přidán 11. 09. 2024
- Понравилось видео или оказалось полезным? Подпишись!
Передача параметров в функцию по ссылке. Разница между ссылкой и указателем. Урок #51
Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут! =)
www.donationale...
или тут
/ simplecode
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit
Спасибо.) Уроки прямо таки пропитаны добротой, после каждого урока хочется учить больше и больше.))
Спасибо за науку!!!
Вы большой умница и талантливый педагог!!!!
Пожалуйста!
Даже не знаю как выразить свою благодарность. Только благодаря вам я ещё не отчислен
Ля, залпом 30 видосов за два дня. До сессии 10 дней. Надо все Лабы сдать. Надеюсь, не отчислят.
@@default2105 2 Лабы осталось😰
@@daniillevi5866 у меня по 20 видео в день)
Спасибо каникулам
Разве что престал к ЕГЭ так усиленно готовиться, так как теперь трачу по 6-7 часов в день на изучение проганья, но мне насрать, и так пиздато сдам ЕГЭ, зато ещё и буду бабушке хвастаться тем, что калькулятор написал
@@LevmurQ_Q красавчик, а я сдал 😍
Daniil Levi поздравляю, но не от всего сердца)))))
Спасибо большое. Спасибо что дали возможность изучать данную область. Мне пора на годик в армию. Всем кто дошёл до этого урока: удачи и успехов.
Как раз три месяца назад я вышел из армии. Кирилл, Удачи!)
Как послужил?
Как прошло время?)
@@Evgeny.. , с армии не выходят:) Это с тюрьмы выходят:)) А с армии дембельнуются:)
@@geroitruda8157 ух ты какой интелегент
Очередное спасибо за урок.
Комментарий не в тему видео. Смотрю уроки зимой, и голоса птиц на фоне прям возвращают в тёплое лето.
Большое Вам спасибо за уроки. Все доходчиво и понятно обьясняете. Даже новичку под силу! Так держать.
Огромное спасибо вам за урок, Сергей! Очень полезно и доходчиво!
Cпасибо Серега за урок , очень затягивает. Отличная подача.
#ссылки #указатели #функции #SimpleCode #урокипрограммирования
Клас
Весьма благодарен!!! Яснее некуда!!
от души Сергей, благодарю вас за ваш труд, ваши уроки!
Спасибо, наконец-то дошло! Огромное спасибо!
нихерасе, 51 видос просмотрел. В жизни с одного плейлиста столько видосов не смотрел
Я столько amw за два дня смотрю
@@SaffronChipMCPE ну ты сравнил - amw и обучающие видосы
@@LevmurQ_Qсейчас я даже меньше amw смотрю в связи со сломанным левым наушником :)
@@LevmurQ_Q к тому же не все amw мне подходят,приходится смотреть одно и то же, что со временем надоедает, из-за чего приходится делать что-то другое
Неделю бился с курсами на linkedIn, пришел к Вам и все стало понятно! Спасибо! Здоровья Вам!
* Самые понятные, видео уроки по c++, на всём (RU) youtube *
Спасибо
я начал учить плюсы у другого , тоже на ютьбе, сейчас зашёл на твои уроки, знаешь, такое чувство что я их и не учил, у тебя всё так чётко и понятно. И у меня вопрос что учить сначала плюсы или шарп, ты как специалист, посоветуй. и да надеюсь у тебя будут уроки по яве. А так желаю процветания твоему каналу и успехов, спасибо за твои классные уроки!
Что учить, зависит от того для чего это учить.
Самое лучшее объяснение темы "указатели и ссылки" что я видел, все четко, наглядно, спасибо.
моя программа "как то работала", но понять этого я не мог :) Синтаксис вышел случайно почти) Была задача вызывать функцию, передавать ей пару байтовых значений, делать некоторую опрерацию, ничего не возвращая. Только таких вызовов функции было пару десятков, и все с разными именами переменных в аргументах. Через return это был костыль, а вот с ссылкой на имя переменной, которую я указываю в одином из аргументов, все прекрасно решилос. А вот после этого видео все стало на свои места. Оказывается, вся я делал правильно) (пишу под микроконтроллер программу). Спасибо!
я понял так: foo1 это грубо говоря int a=value; a=1; - только в функции foo1 value=1, за пределами этой функции -5, потому что мы создали локальную переменную 'а' равную value. foo2 это &a=value,ссылке 'a' присваиваем значение 2, а так как ссылка указывает на value то и value примет значение 2. foo3 это *a=&value, *a (разыменованный указатель) присваиваем значение 3, а указатель указывает на переменную value, значит value тоже присвоится значение 3.
уроки просто супер, все понятно, четко )жаль что у нас учитель не так обясняет
Как же все понятно! Спасибо за уроки.
Очень хороший видео-урок для закрепления понимания указателей и ссылок
Сергей, спасибо!
Мужик ты лучший именно этот вопрос у меня выпал на окр. Здоровья семье, я тебя обожаю ❤
Спасибо за урок!
привет из 2023. Спасибо большое за уроки!
Спасибо! С Вами я еще на шаг приблизился к мечте стать программистом = )
надеюсь стал
Получилось?
@@arsIsv не забил на учебу. Решил продолжить работать грузчиком.
@@user-ic5ws1df8g не забил на учебу, то есть ты забил на нее, или не забил?
Спасибо! Что научили пользоваться отладчиком. Благодаря ему Ваши уроки усваиваются намного проще!!!
Cпасибо, отлично объяснил и главное доступно.
Поначалу думал, что у нас происходит работа в обоих случаях с int value = 5. Слава богу придумали отладчик с заходом, и мне дошло, что эти данные перезаписываются в одном и том же адресе.
p.s. Спасибо за урок!)
51-й урок, всё понятно, идём дальше!
объяснения хорошие) но хотелось бы узнать, а не правильнее ли писать "int& a" вместо "int &a", а также "int* a" вместо "int *a"? это же по идее как отдельный тип данных "указатель на int"... так вроде и логичнее выглядит и смотрится удобнее
а также хорошо бы показать как возвращать через return указатель или ссылку, какие там подводные камни могут быть)
Обожаю твои уроки👍
Спасибо автору. Уроки очень доходчивые. Но у меня по прежнему сложности с понимаем того что происходит при вызове первой функции. И что там за загадочная копия создается( копия где? копия чего? , копия почему ? ) Все остальное в курсе ( до настоящего момента ) доступно и относительно просто для меня.
Круто!
Хотя конечно эту подтему я разобрал сам для себя ещё на указателях \._./
К слову советую использовать chatgpt для некоторых подробностей и уточнений ...
Просто очень часто! Хоть я и новичек, но хочется копаться все глужбе и осознавать принцип работы тех или иных штук! Под капот рыть в самый корень, но конечно осознаю что щас мне это не сильно и потребно в плане это скорее мешает обучению ведь слишком большой уровень абстракции для меня)
На данный момент сделал вывод - Со ссылками работать проще чем с указателями. Но работа с указателями делает очевидным, что в функции вы работаете с данными "на прямую" а не работаете с данными переданными по значению, что при работе с кодом (особенно чужим) может привести к непредсказуемым последствиям подобным возникшим у Влада тут ниже в коменнтариях, где человек не желая этого изменил значение переменной "а"...
Уроки огонь ! Спасибо!
На фоне видео птички поют... классно прям :)
Respect🕶
Спасибо!
Как будто хорошую книгу читаю, с каждой страницей все шире открываются глаза на сюжет
Спасибо! Все доходчиво!!!
Спасибо за работу! Для меня лично тема указателей и ссылок всегда была камнем преткновения. Но возникает вопрос: если работа со ссылками проще и удобнее, а суть схожа с указателями, то в чем преимущества последних, если их не исключили из стандарта языка?
Я супер новичок и, возможно, скажу какую-то глупость, но в одном из предыдущих уроков Сергей рассказывал об арифметике указателей. Как я понял, в случае с указателем, можно сместиться в следующую ячейку памяти, а в случае с ссылкой такого сделать нельзя. Смещение, наверное, можно как-то скомбинировать с массивами.
Спасибо огромное!
Чувак, ты классный. Прикручивай донат.
донат прикручен уже давно (относительно твоего комментария)
Не было проговорено, что указатель может принимать нулевое значение и обращаться к еще как бы несуществующему объекту или в ходе временно обращения, а ссылка всегда указывает на уже существующий постоянно объект, вот самая важная разница.
В прошлом уроке последний пункт раскрывали)
красачик кореш крутые видосы спс тебе
Спасибо!🥰
спасибо за уроки;)
Супер!
Спасибо!!!
Из практики ссылки или указатели чаще используются?
0:44 - Функция void foo(int &a) // Функция принимает значение по ссылке
3:07 - Логика функций
4:51 - Отличие ссылки
5:28 - Отличие указателя
7:18 - Разница при работе с функцией, ссылкой и параметрами по значению
Сергей, здравствуйте, давно смотрю ваши уроки. Пришлось вернутся с более поздних. Когда немного стал разбираться, пришел к выводу, что ваша интерпретация (ссылка и указатель) а это
оператор разыменования ( * ) и оператор взятия адреса ( & )...в вашей интерпретации немного замудрено. ИМХО меня это ввело в заблуждение и приходилось долго переосмысливать "натуральный" функционал работы данных оператор.
ps может я просто туплю) а за уроки огромное спасибо)
Спасибо.)
Годные видосы, сейчас к экзамену по проге готовлюсь по ним) Думаю летом всё от начала до конца посмотрю, чтобы в голове информацию как-то структурировать, а то каша после универа
Очень хорошие уроки. Тема указатели и ссылки подробно разобраны и самое главное понятно. Но у меня есть один вопрос по небольшой программе
#include
using namespace std;
int res(int a,int b, int *c)
{
(*c)++;
return a+b;
}
int main()
{
setlocale(LC_ALL, "ru");
int a = 5, b=2, c=4;
//res(a, b, &c);
cout
я думаю это связанно с работой cout ,компилятор смотрит что изменений переменной с не предвидится, и подставляет сразу туда значение переменной. до вызова еще res.
Запустил у себя этот код и значение переменной "с" изменилось. (*pc)++; увеличило "с" на 1 и сохранило в памяти
Может нужно поменять значение переменной с а потом указатель?
попробовал этот код на VisualStudio19 и действительно 'c' не меняется, но добавил еще один cout
Можно ли для простоты понимания сказать, что передача данных в функцию - это то же самое, что постановка знака равенства при инициализации? Как вижу я, порядок и логика сохраняются.
У меня тоже такое мнение сложилось , не знаю
Mike Steinar,да можно и так сказать. int a = 7;
int &ref = a; Логика здесь есть. С указателями примерно тоже самое.
В своё время забросил изучение c++ на указателях, так как мне не хватало чего-то вроде ссылок. Теперь жалею, что не продолжил изучение
В этих уроках всё прекрасно кроме названия функции foo ))
func)
Удачи в развитии канала))
👍
Я правильно понял, что функции принимающие параметры по ссылке, это тот тип функций который используется в языках python, java, javascript (и еще до кучи)?
Здравствуйте, ваши уроки супер) возник такой вопрос. А если бы функциям, принимающим по значению и по ссылке, дать одинаковое название. Будет ли больше одного экземпляра перегрузки функции?
Да, это будет работать. Я бы советовал такие вопросы проверять самому на практике в компиляторе.
Сергей, спасибо вам большое за уроки. Мне всё понятно на момент урока но чем дальше я смотрю уроки я забываю предыдущие. Очень волнуюсь по этому поводу что не смогу усвоить такой большой объем информации.
Практиковаться надо чаще, задачки всякие решать и т.д. тогда информация гораздо лучше усвоится
@@cicada666 Спасибо, буду больше практиковаться.
У меня тоже самое недовно было. Я забыл, как делать шаблонные функции, запомнил только template, type(потом понял что должно быть typename), class, T. Посмотрел свои прошлые записи и всомнил
Я сначала курса тетрадь завёл. Всю теорию туда записываю, если что-то вдруг забыл, конспект под рукой. Рекомендую так сделать.
тяжело много лишних слов смысл уловить тяжко но лайк поставил
А что будет если foo перегрузить? Он обратится к самой нижней из возможных?
Советую несколько раз пересмотреть, вам лучше будет.
спасибо, уроки супер, единственное что не хватило в уроке это инфы на те же самые темы только при условии передачи в функции просто чисел, без переменных
А с числами нет смысла использовать ссылки и указатели. Ведь суть их в том ,что при изменении значения ссылки в функции изменяется та переменная ,на которую указана ссылка . С числом получается нужно работать как и всегда,как с обычной функцией , (return использовать)
Все здорово! темболее скоро c#! Спасибо автор😊(я не один слышал птиц на заднем плане? Или я уже ополаумел 😂)
День добрый, Сергей. По данному уроку вопрос небольшой(Если вопросы тут задавать нельзя, перенаправьте, пожалуйста) Попытался функции Foo задать два значения и в main() вывести до того как поменять значения value
int Foo(int a, int b)
{
a = 7;
b = 1;
}
int main()
{
int value,value2;
cout
У вас функция принимает переменные по значению. Это значит что функция все операции производит над локальными переменными, которые удаляются после завершения работы функции
домашку бы какую-нибудь
Поставил скорость на 1.25 и сразу бодрячком)
Спсб
Тогда вопрос - зачем париться с указателями, когда все можно сделать с помощью ссылок??
- Пока у вас простые типы разницы никакой
- С ссылкой вы обращаетесь как будто это переменная, а с указателем нужно его правильно получать/разыменовывать
- Нельзя объявить массив ссылок
- Существует арифметика указателей, но нет арифметики ссылок
- Ссылка, в отличии от указателя, не может быть не инициализированной
@@Salavat1k , если нельзя обьявить массив ссылок, то зачем нужно обьявлять массив указателей ?
@@CaytoCatugawa так проще создать массив строк разной длины
Что лучше использовать ссылку или указатель?
Проще использовать ссылку ибо меньше дописываем дополнительных операторов. Но если используешь массив с переменными , то обратившись по указателю к первой переменной из массива , и после произведя с указателем (без использования оператора разименования * ) операции сложения с каким либо числом (число должно быть не больше количества значений в массиве минус один) мы перемещаемся (смещаемся от изначального адреса ) уже к адресу иной переменной в массиве . А далее можем либо прочитать значение с этого нового адреса , либо вообще перезаписать напрямую присвоив новое значение , или произвести арифметические операции.
Поясните пожалуйста этот код:
uint32_t read32(File f) {
uint32_t result;
((uint8_t *)&result)[0] = f.read(); // LSB
((uint8_t *)&result)[1] = f.read();
((uint8_t *)&result)[2] = f.read();
((uint8_t *)&result)[3] = f.read(); // MSB
return result;
}
эта ссылка или использования адреса переменной.
14:00
Разобрался. Если которко:
Параметр с типом ссылка или указатель - влияет на аргумент, уходящий в функцию.
Параметр с обычным типом - не влияет на уходящий в функцию аргумент.
да, но тут важно еще понимать разницу между ссылкой и указателем
@@Kokurorokuko и в чём же она?
Так зачем же тогда нужен указатель если ссылка удобнее ? Можно же присвоить в переменную адрес другой переменной без указателя?
дада, я тоже об этом думаю
🧠
6:38... Как?
@@II-mj6bl узнали как?
@@vlad-cl4on возможно ctrl+alt+L
я нашел - ctrl k потом ctrl d
@@vlad-cl4on красава:)
Можно название трека на фоне?)
узнал?(мне тоже надо)
Адрэс взят, в функцию паслат, разыменоват!
мне аж интересно, сколько лайков на последнем уроке
1?
Как понять такой синтаксис Foo( int* (&a) )
Передача параметра в функцию по сслыке. Тип параметра указатель на Int. Внутренние скобки не нужны.
У меня такой вопрос: вот код, я передаю по ссылке 2 значения и в функции их меняю на новые, второе значение я увеличиваю с помощью первого (а++), так почему же увеличивается сама первая переменная, я же ее не увеличиваю напрямую ?
void Funk(int &a, int &b)
{
a = 2;
b = a++;
}
void main()
{
int a = 5, b = 97;
Funk(a, b);
cout
a++; ну вот ты же сам её увеличиваешь постфиксным инкрементом, потому и увеличивается.
Я все таки неправильно выразился, мне не нужно было увеличивать первое число и если я уж хотел увеличить второе, то надо было просто написать "b = a + 1", а не инкрементом увеличивать)
#SimpleCode тут надо было ++а, так? Или все равно 'а' увеличится?
Выражение а++ надо взять в скобки: b = (a++);
Неа)))) это никак не поможет, все останется на ровном месте
Ths
up
смысл тогда вообще этих указателей?
1 лайков, 1 дизлайк.
Функция просто Фууууу))
Ахаххаахх
Спасибо за урок!
Спасибо
Спасибо!
спасибо
Спасибо!
спасибо