Изучение C++ для начинающих / #12 - Указатели и ссылки

  Рет қаралды 62,066

Школа itProger / Программирование

Школа itProger / Программирование

Күн бұрын

В C++ очень много внимания уделено работе с памятью. Для эффективной работы с ней часто используются указатели и ссылки. За урок вы научитесь работать с ними, узнаете зачем они нужны и где они применяются.
✅ Полезные ссылки:
- Курс по C++: itproger.com/course/cpp/12
⏰ Тайм-коды:
00:00 - Начало
00:20 - Ссылка на переменную
02:00 - Что такое ссылка?
04:30 - Работа с ссылками
07:15 - Указатели
11:40 - Работа с указателями
15:05 - Практический пример
22:10 - Заключительная часть
✔ Сообщество программистов: itproger.com/
✔ -------------
Вступай в группу Вк - prog_life 🚀
Инстаграм itProger: / itproger_official
Группа FaceBook - goo.gl/XW0aaP
Instagram: / gosha_dudar
Telegram: t.me/itProger_official
Twitter - / goshadudar
- Уроки от #itProger 👨🏼‍💻
- Все уроки по хештегу #itprogerLessons

Пікірлер: 81
@avelon.
@avelon. Жыл бұрын
мне нравится как объясняет автор, лишь на объяснениях автора пока у меня выходит писать код, делаю задачи озвученную автором, код у меня иногда выходит не такой же как у автора, но работает, почувствовал что уже программист хах, сверил осмыслил переписал
@kpanat
@kpanat 10 ай бұрын
Хорошей аналогией адреса является номер почтового ящика... Это просто число. Но надо иметь ввиду что эти номера идут подряд от 0. Память в компе это нумерованные ячейки по 1 байту которые идут подряд. Если мы указываем адрес то мы говорим что в ячейке с таким номером лежат наши данные. Точнее данные лежат в ячейках памяти начиная с такого-то номера отсчитанные от 0. Потому что данные не всегда занимают 1 байт а обычно больше и потому занимают не 1 ячейку, а больше. Но эти ячейки всегда начинаются с адреса памяти этих данных. Ничего сложного в адресах нет. Это оч простая вещь если понять. Просто этих ячеек памяти в компе дофига и потому числа получаются оч большие...
@user-mf5ce9hm2w
@user-mf5ce9hm2w 11 ай бұрын
Автор молодец, так качественно делает ролики. Жалко что так мало актива.
@SpaceLexaDnepr
@SpaceLexaDnepr Жыл бұрын
Спасибо
@Vanek305
@Vanek305 12 күн бұрын
А как вывести двумерный массив с помощью указателей?и трёхмерный
@ahmedikahmedabad9154
@ahmedikahmedabad9154 Жыл бұрын
автор уже как родной
@user-nf2ji9sc6e
@user-nf2ji9sc6e Ай бұрын
//дАДАДАДАДАДАДДА while (true) std::cout
@OTKA3
@OTKA3 20 күн бұрын
@@user-nf2ji9sc6e int main() { while(true) { std::cout
@akeokwke
@akeokwke 2 күн бұрын
​@@OTKA3 int main() { bool thetrue; while(thetrue) { std::count
@Remington-og3tf
@Remington-og3tf 11 ай бұрын
Это было полезно!
@RadaCasian-ep8ht
@RadaCasian-ep8ht Жыл бұрын
Как можно пройти курс c++ у вас ?
@vadimgreen3738
@vadimgreen3738 10 күн бұрын
можно вопрос? я в принципе понял, как работает последний пример. Но в функции в параметрах записано int * arr - получается тип данных - это указатель на int. А сам массив у нас не задан указателем, то есть выделением памяти - он задан просто, без указателя - int arr[]. Почему так? а не изначально int * arr = new int(len) и потом в функции полноправно использовать созданный указатель. Возможно я чего-то не знаю, или не понял. Но уже полгода программировал в универе и вроде бы так было правильно
@kookaburru
@kookaburru Жыл бұрын
minval(int arr[]) и (int *arr) одно и тоже. Массив всегда передается как указатель.
@SolarSystem_sUser
@SolarSystem_sUser Ай бұрын
тоже на этом моменте не понял автора. в каком месте массив начинает занимать место дважды... по идее адрес у него один всегда.
@TestTest-fi2ok
@TestTest-fi2ok Ай бұрын
Все понятно, кроме одного, где на практике нужно использовать ссылки? В каких случаях?
@woomy_squid
@woomy_squid 24 күн бұрын
Не понял, почему ptrval вывел 20 после обнуления
@user-up9yf8jl5r
@user-up9yf8jl5r 9 ай бұрын
20:50 можно просто написать условие if (arr[i] < min)
@catanonimus7
@catanonimus7 7 ай бұрын
Нельзя, это указатель на элемент, а не сам массив
@kpanat
@kpanat 10 ай бұрын
Это негласное правило по которому вы * пристыковываете с типом или с переменной определяет шарпист Вы или плюсовик. если вы пишете так int* a, то Вы шарпист, а если int *a, то плюсовик... А некоторые пишут так: int * a. Но это тоже плюсовик, но продвинутый. Такая запись подчёркивает тот факт что это именно указатель а не что-то ещё.
@AndriiTurchynRieltorDnipro
@AndriiTurchynRieltorDnipro 11 ай бұрын
дякую
@solomr2013
@solomr2013 Жыл бұрын
Гоша, чтобы ты порекомендовал Линукс или виндовс для программирования если выбирать что то одно?
@zomsofficial
@zomsofficial Жыл бұрын
Для программирования FREEBSD там нечему ломаться и нагружать пк
@linuxoidovich
@linuxoidovich Жыл бұрын
Каждому удобнее разное, но в линуксе есть удобные пакетные менеджеры, возможность быть на musl, а не glibc, там хорошо работают тайлинговые wm, которые ускоряют разработку и повышают удоство.
@alibaba40thiefs
@alibaba40thiefs 2 ай бұрын
Под какую систему будешь писать, ту и выбирай.
@defolt7
@defolt7 10 ай бұрын
не понял, а почему у меня пишутся разные адреса одной и той же ячейки, то есть не как у вас
@w0njet
@w0njet 8 ай бұрын
22:10 у меня код в точь точь как у тебя но минимальный елемент 5 хотя там тоже есть -2. Помоги
@baldeg_
@baldeg_ 7 ай бұрын
просто он гавнокодер и написал полную залупу, массив всегда передается как указатель , поэтому толку от int *arr нету, если говорить про ссылку на переменную, то это вообще пиздец, так никто не делает, из-за этого только путаница будет в коде
@bahromjonabdusamatov8501
@bahromjonabdusamatov8501 Жыл бұрын
Круто
@SolarSystem_sUser
@SolarSystem_sUser Ай бұрын
не понятно почему созданный массив передается в функцию и там занимает еще раз место. у него меняется адрес? он дублируется? что происходит при передаче массива в функцию, что он занимает еще раз место в памяти... этот момент не раскрыт. имхо.
@martinslepynin7959
@martinslepynin7959 3 ай бұрын
всем привет ответьте на вопрос почему if (min>*(arr+i)); происходит смещение указателя а не сложение элемента массива с i
@user-ws1ud4op9i
@user-ws1ud4op9i 3 ай бұрын
Потому что никакого элемента массива нет
@novichok3417
@novichok3417 18 күн бұрын
Потому что arr это адрес первой ячейки массива элемент массива и меет длину 4 байт. Через 4 байт начинается второй элемент массива и переменная i это 4 байта тоесть каждый раз адрес увеличивается на 4 байта (для int, для других типов другая)
@horhegarsia4221
@horhegarsia4221 10 ай бұрын
Вот 5:11 у Вас же восьмибайтовый адрес переменной ))
@novichok3417
@novichok3417 18 күн бұрын
8 байт это 8 бит 8 раз получается 64 символа . Там 64 символа?
@maywx
@maywx Жыл бұрын
можно ли делать игры с движком unity на c++?
@aram2010uk
@aram2010uk Жыл бұрын
Нет unity только с c#, c++ можно использовать в unreal engine
@maywx
@maywx Жыл бұрын
@@aram2010uk спасибо
@deniszaltsberg2127
@deniszaltsberg2127 Жыл бұрын
а зачем нужны вообще ссылки? ну типо у меня есть значение в одной переменной с названием X, и все что дают ссылки это менять значение X меняя Y.
@user-nj2kn3vy4j
@user-nj2kn3vy4j Жыл бұрын
Согласен, по сути только для того чтобы не занимать лишнюю память, но в тоже время если я допустим захочу изменять значение которое в себя принимает переменная, отдельно от ссылки. То изменяться будут оба значения и ссылки что в принципе логично и переменной. Тоже самое и с переменной. Сам особо не пойму где можно использовать. Другое дело указатели, реально полезная штука если разобраться.
@jcdfce2707
@jcdfce2707 10 ай бұрын
@@user-nj2kn3vy4j один из вариантов применения - для создания псевдонима переменной. Например, вы дорабатываете чужой код, вам надо доработать код, функцию или метод, а предыдущий программист не сильно заморачивался с именами переменных и вместо rentpay (это просто пример, Оплата ренты) написал имя переменной одной буквой r, соответственно листать весь код и менять везде имя переменной вы не будете, вы просто создаете ссылку на переменную r и работаете с удобным и читаемым именем переменной.
@user-gw4uc3gs7z
@user-gw4uc3gs7z Жыл бұрын
народ почемк я добавил отрицательные числа в массив, но метод минимум выводит лишь минимальное положительное число?
@doctor_livsi_pod_phonk
@doctor_livsi_pod_phonk 10 ай бұрын
Возможно у тебя unsigned int, что значит беззнаковый int, но тогда бы ты не смог инициализировать переменную отрицательным значением, поэтому ответа на твой вопрос нету)) если ты сделал также как в видео разумеется
@user-gw4uc3gs7z
@user-gw4uc3gs7z 10 ай бұрын
@@doctor_livsi_pod_phonk я уже нашел косяк) не помню где был. но спасибо
@blackdragon7405
@blackdragon7405 8 күн бұрын
@@doctor_livsi_pod_phonkкстати нет если unsigned int передать минусовой Int то он выведет по модулю значения от максимального int вроде: unsigned int num = -1; std::cout
@kpanat
@kpanat 10 ай бұрын
В ссылке на переменную нет смысла если мы не используем полиморфизм. Потому что мы получаем фактически другое имя для неё. Это бесполезное действо. Более того вносит путаницу в код. Поэтому так никто не делает.
@user-yl2zz5qn8z
@user-yl2zz5qn8z Жыл бұрын
что такое "len"? подскажите пожалуйста в каком уроке его проходили? (16:30)
@user-cr8mc9yu9p
@user-cr8mc9yu9p Жыл бұрын
len - это название, которое означает количество элементов в массиве. На его месте можно было бы написать любое другое название))
@user-yl2zz5qn8z
@user-yl2zz5qn8z Жыл бұрын
@@user-cr8mc9yu9p благодарю
@user-yl2zz5qn8z
@user-yl2zz5qn8z Жыл бұрын
ааа понял! во я туп туп)
@El_Cuero
@El_Cuero Жыл бұрын
Здравствуйте, скажите пожалуйста, почему Ваш сайт не открывается?
@user-xq1cq3uj1l
@user-xq1cq3uj1l 2 ай бұрын
Я его взломал
@vasyanpro8848
@vasyanpro8848 10 ай бұрын
как добавились эти указатели все перепуталось, и простейшие программы теперь вообще не понятны(
@woomy_squid
@woomy_squid 24 күн бұрын
Зачем нужны ссылки, если есть указатели?
@user-fw8ei5ys6r
@user-fw8ei5ys6r Ай бұрын
А C++ плохо не станет если я напишу int e = 1 int &a = e + 1 ?
@novichok3417
@novichok3417 18 күн бұрын
Я думаю нет . Выполнение начнётся с права налево : переменная e увеличится на единицу и адрес переменной e запишится в переменную a
@raldbthar
@raldbthar Жыл бұрын
Зачем вводить людей в заблуждение, ссылки ничего не хранят, а вот как раз указатели могут хранить адрес. Ссылка это ещё одно название для переменной или alias
@Morena-ok8fg
@Morena-ok8fg Жыл бұрын
если бы на ваш коммент, я бы так и не поняла ничего. Благодарюююю)))
@Lol_12246
@Lol_12246 11 ай бұрын
Вы случайно не знаете видео или статью где подробнее объясняют эту тему. А то как то хреново объяснил тему. "Просто запомните", даже не объяснил как толком это работает.
@user-ip8jz9fr4l
@user-ip8jz9fr4l Жыл бұрын
Подскажи пожалуйста какой фреймворк выбрать для написания скринера на python для торговли на крипте?
@linuxoidovich
@linuxoidovich Жыл бұрын
С нуля писать можно.
@user-qs9ug6tp1v
@user-qs9ug6tp1v Жыл бұрын
А нельзя было поставить ссылку на весь массив ?
@novichok3417
@novichok3417 18 күн бұрын
Адрес перввог элемента и есть ссылка на весь массив
@RodjerX
@RodjerX Жыл бұрын
Я думал, что запись *(val + i ) , где val имеет тип int сместится на адрес слеующей ячейки памяти. А так как int это 4ре байта, то на вторую ячейку из четырёх. А для смещения на следующий элемент массива придётся делать *( val + i * sizeof( int ) ). Теперь сижу и думаю в чём я не прав.
@raldbthar
@raldbthar Жыл бұрын
Указатель типа int сам знает на сколько байт ему смещаться при арифметике указателей, компилятор распознает и интерпретирует например *(val + 2) как "добавить к адресу val 2*(sizeof(int)), и считать значение int по полученному адресу с помощью операции разыменования '*'
@RodjerX
@RodjerX Жыл бұрын
@@raldbthar логика понятна, спасибо. 🤝🏼
@horhegarsia4221
@horhegarsia4221 10 ай бұрын
Если подумать. Разрядность процессора - 64, значит, в теории, размер оперативной памяти может быть очень большим (тип long, т.к. 8 * 8 = 64). Получается, чтобы хранить адрес ячейки памяти необходимо 8 байт. Верно? Теперь по поводу ссылок: гораздо нагляднее был бы пример с пользовательсим вводом внутри пользовательской функции, которая принимает параметр-ссылку и ни чего не возвращая, меняет значение по ссылке.
@hxntaininja
@hxntaininja 5 ай бұрын
Нихуя не понятно
@maasimada
@maasimada 5 ай бұрын
согласен
@defolt7
@defolt7 10 ай бұрын
все понял лишний амперсант написал
@horhegarsia4221
@horhegarsia4221 10 ай бұрын
Про указатели и ссылки вообще не понятное объяснение.
@parabox3176
@parabox3176 Жыл бұрын
Полностью скопировал код из видео, код не работает. Ни черта не понимаю. Программирование это весело.
@amerigovespucci1499
@amerigovespucci1499 Жыл бұрын
chatGPT в помощь
@w0njet
@w0njet 8 ай бұрын
У меня тоже. Исправил ошибку? Если да, помоги пожалуйста.
@parabox3176
@parabox3176 8 ай бұрын
@@w0njet Неа. Я забил на неё.
@w0njet
@w0njet 8 ай бұрын
​@@parabox3176я нашел ошибку (chatgpt точнее) ты скорее ошибся когда писал код в функции, по крайней мере я там ошибся. Я написал (*arr + i) а надо было *(arr + i), сорян если я не понятно объяснил
@w0njet
@w0njet 8 ай бұрын
22:10 у меня код в точь точь как у тебя но минимальный елемент 5 хотя там тоже есть -2. Помоги
@w0njet
@w0njet 8 ай бұрын
Я нашел ошибку 😂
@hiwinner9467
@hiwinner9467 8 ай бұрын
у меня такое же, в чём была ошибка?@@w0njet
@hiwinner9467
@hiwinner9467 8 ай бұрын
Всё, нашёл в чём проблема) Я вместо i , написал 1
@user-xq1cq3uj1l
@user-xq1cq3uj1l 2 ай бұрын
А я не нашëл
@user-to7lv9kw1y
@user-to7lv9kw1y Ай бұрын
@@user-xq1cq3uj1l нашел ошибку?
Изучение C++ для начинающих / #13 - Работа с файлами при помощи C++
12:40
Школа itProger / Программирование
Рет қаралды 51 М.
Как бы я начал учить кодинг сейчас?
12:15
WORLD'S SHORTEST WOMAN
00:58
Stokes Twins
Рет қаралды 133 МЛН
Mama vs Son vs Daddy 😭🤣
00:13
DADDYSON SHOW
Рет қаралды 51 МЛН
you will never ask about pointers again after watching this video
8:03
Low Level Learning
Рет қаралды 2,1 МЛН
Всё об указателях в C++ за 20 минут
20:00
Изучение C++ для начинающих / #16 - Обработчик исключений (ошибок)
7:06
Школа itProger / Программирование
Рет қаралды 29 М.
Добро пожаловать в C++
16:08
Winderton
Рет қаралды 457 М.
Собеседование Junior C++
45:32
Ambushed Raccoon
Рет қаралды 109 М.
WORLD'S SHORTEST WOMAN
00:58
Stokes Twins
Рет қаралды 133 МЛН