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

Поделиться
HTML-код
  • Опубликовано: 9 ноя 2024

Комментарии • 90

  • @makeyourgame2210
    @makeyourgame2210 8 дней назад +1

    Пожалуй, лучшее объяснение указателей и ссылок, которые вызывают у многих достаточно сложностей

  • @avelon.
    @avelon. Год назад +42

    мне нравится как объясняет автор, лишь на объяснениях автора пока у меня выходит писать код, делаю задачи озвученную автором, код у меня иногда выходит не такой же как у автора, но работает, почувствовал что уже программист хах, сверил осмыслил переписал

  • @kpanat
    @kpanat Год назад +11

    Хорошей аналогией адреса является номер почтового ящика... Это просто число. Но надо иметь ввиду что эти номера идут подряд от 0. Память в компе это нумерованные ячейки по 1 байту которые идут подряд. Если мы указываем адрес то мы говорим что в ячейке с таким номером лежат наши данные. Точнее данные лежат в ячейках памяти начиная с такого-то номера отсчитанные от 0. Потому что данные не всегда занимают 1 байт а обычно больше и потому занимают не 1 ячейку, а больше. Но эти ячейки всегда начинаются с адреса памяти этих данных. Ничего сложного в адресах нет. Это оч простая вещь если понять. Просто этих ячеек памяти в компе дофига и потому числа получаются оч большие...

  • @ГлебШумигай
    @ГлебШумигай Год назад +20

    Автор молодец, так качественно делает ролики. Жалко что так мало актива.

  • @ahmedikahmedabad9154
    @ahmedikahmedabad9154 Год назад +21

    автор уже как родной

    • @ОльгаЮрова-е9к
      @ОльгаЮрова-е9к 4 месяца назад +2

      //дАДАДАДАДАДАДДА
      while (true)
      std::cout

    • @OTKA3
      @OTKA3 3 месяца назад +1

      @@ОльгаЮрова-е9к int main() {
      while(true) {
      std::cout

    • @Tlay_Minecraft
      @Tlay_Minecraft 2 месяца назад

      Вы не подключили

    • @desidemeokla
      @desidemeokla 2 месяца назад

      @@Tlay_Minecraft Я думаю, всем итак понятно

    • @Maxnv_0
      @Maxnv_0 Месяц назад

      Программа уйдёт в бесконечный цикл и выдаст ошибку

  • @TestTest-fi2ok
    @TestTest-fi2ok 5 месяцев назад +4

    Все понятно, кроме одного, где на практике нужно использовать ссылки? В каких случаях?

  • @kpanat
    @kpanat Год назад +2

    Это негласное правило по которому вы * пристыковываете с типом или с переменной определяет шарпист Вы или плюсовик. если вы пишете так int* a, то Вы шарпист, а если int *a, то плюсовик... А некоторые пишут так: int * a. Но это тоже плюсовик, но продвинутый. Такая запись подчёркивает тот факт что это именно указатель а не что-то ещё.

  • @m1nd-s7k
    @m1nd-s7k Год назад

    20:50 можно просто написать условие if (arr[i] < min)

    • @catanonimus7
      @catanonimus7 10 месяцев назад +4

      Нельзя, это указатель на элемент, а не сам массив

  • @SpaceLexaDnepr
    @SpaceLexaDnepr Год назад +2

    Спасибо

  • @RadaCasian-ep8ht
    @RadaCasian-ep8ht Год назад +5

    Как можно пройти курс c++ у вас ?

  • @raldbthar
    @raldbthar Год назад +35

    Зачем вводить людей в заблуждение, ссылки ничего не хранят, а вот как раз указатели могут хранить адрес. Ссылка это ещё одно название для переменной или alias

    • @Morena-ok8fg
      @Morena-ok8fg Год назад +8

      если бы на ваш коммент, я бы так и не поняла ничего. Благодарюююю)))

    • @Lol_12246
      @Lol_12246 Год назад +3

      Вы случайно не знаете видео или статью где подробнее объясняют эту тему. А то как то хреново объяснил тему. "Просто запомните", даже не объяснил как толком это работает.

  • @Remington-og3tf
    @Remington-og3tf Год назад +5

    Это было полезно!

  • @AndriiTurchynRieltorDnipro
    @AndriiTurchynRieltorDnipro Год назад +2

    дякую

  • @vadimgreen3738
    @vadimgreen3738 3 месяца назад

    можно вопрос? я в принципе понял, как работает последний пример. Но в функции в параметрах записано int * arr - получается тип данных - это указатель на int. А сам массив у нас не задан указателем, то есть выделением памяти - он задан просто, без указателя - int arr[]. Почему так? а не изначально int * arr = new int(len) и потом в функции полноправно использовать созданный указатель. Возможно я чего-то не знаю, или не понял. Но уже полгода программировал в универе и вроде бы так было правильно

  • @Vanek305
    @Vanek305 3 месяца назад +3

    А как вывести двумерный массив с помощью указателей?и трёхмерный

    • @SpeedCuber______
      @SpeedCuber______ Месяц назад

      А ты попробуй сам до этого дойти, ты программист)))0)

  • @kookaburru
    @kookaburru Год назад +15

    minval(int arr[]) и (int *arr) одно и тоже. Массив всегда передается как указатель.

    • @SolarSystem_sUser
      @SolarSystem_sUser 4 месяца назад +2

      тоже на этом моменте не понял автора. в каком месте массив начинает занимать место дважды... по идее адрес у него один всегда.

  • @redoboly
    @redoboly 2 месяца назад

    а можно также с векторами делать надеюсь?

  • @horhegarsia4221
    @horhegarsia4221 Год назад +1

    Вот 5:11 у Вас же восьмибайтовый адрес переменной ))

    • @novichok3417
      @novichok3417 3 месяца назад

      8 байт это 8 бит 8 раз получается 64 символа . Там 64 символа?

  • @woomy_squid
    @woomy_squid 3 месяца назад +3

    Зачем нужны ссылки, если есть указатели?

  • @w0njet
    @w0njet Год назад +2

    22:10 у меня код в точь точь как у тебя но минимальный елемент 5 хотя там тоже есть -2. Помоги

    • @baldeg_
      @baldeg_ 10 месяцев назад +5

      просто он гавнокодер и написал полную залупу, массив всегда передается как указатель , поэтому толку от int *arr нету, если говорить про ссылку на переменную, то это вообще пиздец, так никто не делает, из-за этого только путаница будет в коде

  • @solomr2013
    @solomr2013 Год назад +5

    Гоша, чтобы ты порекомендовал Линукс или виндовс для программирования если выбирать что то одно?

    • @zomsofficial
      @zomsofficial Год назад +1

      Для программирования FREEBSD там нечему ломаться и нагружать пк

    • @linuxoidovich
      @linuxoidovich Год назад +2

      Каждому удобнее разное, но в линуксе есть удобные пакетные менеджеры, возможность быть на musl, а не glibc, там хорошо работают тайлинговые wm, которые ускоряют разработку и повышают удоство.

  • @martinslepynin7959
    @martinslepynin7959 6 месяцев назад

    всем привет ответьте на вопрос почему if (min>*(arr+i)); происходит смещение указателя а не сложение элемента массива с i

    • @5классвиленкин-ъ4п
      @5классвиленкин-ъ4п 6 месяцев назад

      Потому что никакого элемента массива нет

    • @novichok3417
      @novichok3417 3 месяца назад

      Потому что arr это адрес первой ячейки массива элемент массива и меет длину 4 байт. Через 4 байт начинается второй элемент массива и переменная i это 4 байта тоесть каждый раз адрес увеличивается на 4 байта (для int, для других типов другая)

  • @woomy_squid
    @woomy_squid 3 месяца назад +1

    Не понял, почему ptrval вывел 20 после обнуления

    • @Gllory
      @Gllory 2 месяца назад

      Обнулился Только с *, а переменная осталась

  • @deniszaltsberg2127
    @deniszaltsberg2127 Год назад +2

    а зачем нужны вообще ссылки? ну типо у меня есть значение в одной переменной с названием X, и все что дают ссылки это менять значение X меняя Y.

    • @ГусевАлександр-у1л
      @ГусевАлександр-у1л Год назад +1

      Согласен, по сути только для того чтобы не занимать лишнюю память, но в тоже время если я допустим захочу изменять значение которое в себя принимает переменная, отдельно от ссылки. То изменяться будут оба значения и ссылки что в принципе логично и переменной. Тоже самое и с переменной. Сам особо не пойму где можно использовать. Другое дело указатели, реально полезная штука если разобраться.

    • @jcdfce2707
      @jcdfce2707 Год назад

      @@ГусевАлександр-у1л один из вариантов применения - для создания псевдонима переменной. Например, вы дорабатываете чужой код, вам надо доработать код, функцию или метод, а предыдущий программист не сильно заморачивался с именами переменных и вместо rentpay (это просто пример, Оплата ренты) написал имя переменной одной буквой r, соответственно листать весь код и менять везде имя переменной вы не будете, вы просто создаете ссылку на переменную r и работаете с удобным и читаемым именем переменной.

  • @Непрофессионалымы

    народ почемк я добавил отрицательные числа в массив, но метод минимум выводит лишь минимальное положительное число?

    • @doctor_livsi_pod_phonk
      @doctor_livsi_pod_phonk Год назад

      Возможно у тебя unsigned int, что значит беззнаковый int, но тогда бы ты не смог инициализировать переменную отрицательным значением, поэтому ответа на твой вопрос нету)) если ты сделал также как в видео разумеется

    • @Непрофессионалымы
      @Непрофессионалымы Год назад

      @@doctor_livsi_pod_phonk я уже нашел косяк) не помню где был. но спасибо

    • @blackdragon7405
      @blackdragon7405 3 месяца назад

      @@doctor_livsi_pod_phonkкстати нет если unsigned int передать минусовой Int то он выведет по модулю значения от максимального int вроде:
      unsigned int num = -1;
      std::cout

  • @bahromjonabdusamatov8501
    @bahromjonabdusamatov8501 Год назад

    Круто

  • @SolarSystem_sUser
    @SolarSystem_sUser 4 месяца назад

    не понятно почему созданный массив передается в функцию и там занимает еще раз место. у него меняется адрес? он дублируется? что происходит при передаче массива в функцию, что он занимает еще раз место в памяти... этот момент не раскрыт. имхо.

  • @defolt7
    @defolt7 Год назад

    не понял, а почему у меня пишутся разные адреса одной и той же ячейки, то есть не как у вас

  • @ЭКОНОМкласс-б4ъ
    @ЭКОНОМкласс-б4ъ Год назад +3

    что такое "len"?
    подскажите пожалуйста в каком уроке его проходили?
    (16:30)

    • @ДианаКривнюк-п9н
      @ДианаКривнюк-п9н Год назад +4

      len - это название, которое означает количество элементов в массиве. На его месте можно было бы написать любое другое название))

    • @ЭКОНОМкласс-б4ъ
      @ЭКОНОМкласс-б4ъ Год назад +3

      @@ДианаКривнюк-п9н благодарю

    • @ЭКОНОМкласс-б4ъ
      @ЭКОНОМкласс-б4ъ Год назад +3

      ааа понял!
      во я туп туп)

  • @maywx
    @maywx Год назад +3

    можно ли делать игры с движком unity на c++?

    • @aram2010uk
      @aram2010uk Год назад +3

      Нет unity только с c#, c++ можно использовать в unreal engine

    • @maywx
      @maywx Год назад

      @@aram2010uk спасибо

  • @МишаМасленченко
    @МишаМасленченко 5 месяцев назад

    А C++ плохо не станет если я напишу
    int e = 1
    int &a = e + 1
    ?

    • @novichok3417
      @novichok3417 3 месяца назад

      Я думаю нет . Выполнение начнётся с права налево : переменная e увеличится на единицу и адрес переменной e запишится в переменную a

  • @Nero22834
    @Nero22834 Месяц назад

    Так и не понял в чем разница между ссылками и указателями

  • @kpanat
    @kpanat Год назад

    В ссылке на переменную нет смысла если мы не используем полиморфизм. Потому что мы получаем фактически другое имя для неё. Это бесполезное действо. Более того вносит путаницу в код. Поэтому так никто не делает.

  • @vasyanpro8848
    @vasyanpro8848 Год назад

    как добавились эти указатели все перепуталось, и простейшие программы теперь вообще не понятны(

  • @ЮраНиколаев-ц2в
    @ЮраНиколаев-ц2в Год назад +1

    А нельзя было поставить ссылку на весь массив ?

    • @novichok3417
      @novichok3417 3 месяца назад

      Адрес перввог элемента и есть ссылка на весь массив

  • @horhegarsia4221
    @horhegarsia4221 Год назад +1

    Если подумать. Разрядность процессора - 64, значит, в теории, размер оперативной памяти может быть очень большим (тип long, т.к. 8 * 8 = 64).
    Получается, чтобы хранить адрес ячейки памяти необходимо 8 байт. Верно?
    Теперь по поводу ссылок: гораздо нагляднее был бы пример с пользовательсим вводом внутри пользовательской функции, которая принимает параметр-ссылку и ни чего не возвращая, меняет значение по ссылке.

  • @Александр-к8б9ж
    @Александр-к8б9ж Год назад

    Подскажи пожалуйста какой фреймворк выбрать для написания скринера на python для торговли на крипте?

    • @linuxoidovich
      @linuxoidovich Год назад +3

      С нуля писать можно.

  • @defolt7
    @defolt7 Год назад

    все понял лишний амперсант написал

  • @RodjerX
    @RodjerX Год назад +3

    Я думал, что запись *(val + i ) , где val имеет тип int сместится на адрес слеующей ячейки памяти. А так как int это 4ре байта, то на вторую ячейку из четырёх.
    А для смещения на следующий элемент массива придётся делать
    *( val + i * sizeof( int ) ).
    Теперь сижу и думаю в чём я не прав.

    • @raldbthar
      @raldbthar Год назад +8

      Указатель типа int сам знает на сколько байт ему смещаться при арифметике указателей, компилятор распознает и интерпретирует например *(val + 2) как "добавить к адресу val 2*(sizeof(int)), и считать значение int по полученному адресу с помощью операции разыменования '*'

    • @RodjerX
      @RodjerX Год назад +1

      @@raldbthar логика понятна, спасибо. 🤝🏼

  • @horhegarsia4221
    @horhegarsia4221 Год назад

    Про указатели и ссылки вообще не понятное объяснение.

  • @El_Cuero
    @El_Cuero Год назад +1

    Здравствуйте, скажите пожалуйста, почему Ваш сайт не открывается?

    • @Deadpi47-s2q
      @Deadpi47-s2q 5 месяцев назад

      Я его взломал

  • @parabox3176
    @parabox3176 Год назад +7

    Полностью скопировал код из видео, код не работает. Ни черта не понимаю. Программирование это весело.

    • @amerigovespucci1499
      @amerigovespucci1499 Год назад +3

      chatGPT в помощь

    • @w0njet
      @w0njet Год назад

      У меня тоже. Исправил ошибку? Если да, помоги пожалуйста.

    • @parabox3176
      @parabox3176 Год назад

      @@w0njet Неа. Я забил на неё.

    • @w0njet
      @w0njet Год назад

      ​@@parabox3176я нашел ошибку (chatgpt точнее) ты скорее ошибся когда писал код в функции, по крайней мере я там ошибся. Я написал (*arr + i) а надо было *(arr + i), сорян если я не понятно объяснил

  • @hxntaininja
    @hxntaininja 9 месяцев назад +5

    Нихуя не понятно

    • @maasimada
      @maasimada 8 месяцев назад

      согласен

  • @w0njet
    @w0njet Год назад

    22:10 у меня код в точь точь как у тебя но минимальный елемент 5 хотя там тоже есть -2. Помоги

    • @w0njet
      @w0njet Год назад

      Я нашел ошибку 😂

    • @hiwinner9467
      @hiwinner9467 Год назад

      у меня такое же, в чём была ошибка?@@w0njet

    • @hiwinner9467
      @hiwinner9467 Год назад

      Всё, нашёл в чём проблема) Я вместо i , написал 1

    • @Deadpi47-s2q
      @Deadpi47-s2q 5 месяцев назад

      А я не нашëл

    • @ZxcPudge-i8t
      @ZxcPudge-i8t 4 месяца назад

      @@Deadpi47-s2q нашел ошибку?