Всё об указателях в C++ за 20 минут

Поділитися
Вставка
  • Опубліковано 19 кві 2024
  • Сегодня я расскажу о такой важной теме языка С++, как указатели.
    Если это видео вам понравится, то обязательно ставьте лайки и подписывайтесь на канал: вам не сложно, а мне приятно.
    Телеграм: t.me/mimocaketg
    #C++ #указатели #программирование
    На момент загрузки 604 подписчика
  • Наука та технологія

КОМЕНТАРІ • 68

  • @glasderes
    @glasderes 3 місяці тому +57

    Братан, хорош, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?

    • @nelavas4651
      @nelavas4651 2 місяці тому +2

      точно такой же коммент видел

    • @saikle_
      @saikle_ 2 місяці тому +9

      Последователь екстримкода

    • @user-en6ey3mv2q
      @user-en6ey3mv2q 2 місяці тому +6

      О, Вы тоже человек высокой культуры.

    • @kotleni
      @kotleni 2 місяці тому +3

      @@saikle_ Все мы...

    • @dominuspiritus
      @dominuspiritus 2 місяці тому +1

      Харош)))

  • @aisenchique7072
    @aisenchique7072 10 днів тому +1

    Я зашел, поставил лайк, поставил то-сё. Видосик я посмотрел полностью. Чувак красава, охуенный видос. Кип дуин вот ю дуин, бро

  • @itsmusic2597
    @itsmusic2597 Місяць тому +1

    Бро, очень помогаешь! Все доходчиво и понятно, спасибо огромное!

  • @VoiCedml
    @VoiCedml 3 місяці тому +11

    5:10 Классическая путаница. Имя массива - это имя переменной которая имеет тип массива, а не тип указателя. Просто существует стандартное преобразование из типа массива в тип указателя. Считаю это важным проговаривать, а то начинающие начинают отождествлять эти типы.
    8:33 Это требует не visual studio, это требует стандарт языка. "Subscribe!!" является типом const char[12], который нельзя неявно преобразовать в char*, но можно в const char*. Возможно заблуждение зарождается из практики языка C, где литерал строки действительно возвращает не константный массив, и из-за неявной возможности преобразования в указатель, думают, что сам литерал имеет тип указателя.
    10:42 delete примененный к массиву вызовет деструктор только для первого элемента, но освободит всю память, аллоцированную под этот массив (хотя это, как я помню, implementation-defined behavior). Для массивов из объектов классов, которые сами что-то аллоцируют в куче, это утечка памяти всегда.
    12:00 Прикольно было бы еще рассказать про квалификаторы const в таких случаях и их преобразование. Например, тип const int** pp не сможет указывать на int* p, в то время как const int* p может указывать на int x;

  • @bulba1995
    @bulba1995 Місяць тому

    Хорошо объяснил спасибо .

  • @pl.elektronik
    @pl.elektronik 2 місяці тому

    Сразу подписался. Продолжай!!!

  • @serb1146
    @serb1146 3 місяці тому +5

    Класс! А я думал уже всё забыл. В универе на С/С++ начинал учиться прогать. Дз было - реализация вставки элемента в двусвязный список после определенного значения. До сих пор помню то чувство, когда "ура! работает! ". Удачи и спасибо за видео!

    • @user-ws1ud4op9i
      @user-ws1ud4op9i 2 місяці тому +2

      я не хочу показаться душнилкой, но что ты тут "все забыл", когда это буквально примитивная инфа. А про список - это вообще смешно.

  • @JohnJTraston
    @JohnJTraston 2 місяці тому +10

    Кто всё детство программировал на ассемблере указателей не боится.

    • @Zoom-ez8ps
      @Zoom-ez8ps Місяць тому +3

      Мне страшно за людей, которые всё лето детство программировали на ассемблере

  • @GagagJdjskk
    @GagagJdjskk 2 місяці тому

    Молодец, побольше такого!

  • @user-mz7gz2fq7g
    @user-mz7gz2fq7g 2 місяці тому

    Спасибо ❤❤❤❤❤❤

  • @vladimir_v_it
    @vladimir_v_it 3 місяці тому

    Молодец! Спасибо за видео!

  • @yar444ik
    @yar444ik 2 місяці тому

    как все чётко разжевал, не как мой препод🥲 спасибо тебе большое

  • @проха_картоха
    @проха_картоха Місяць тому

    Ура спасибо большое, я понял как эта шняга работает🎉🎉🎉🎉

  • @ryzen144
    @ryzen144 2 місяці тому +1

    спасибо большое, сильно помог мне осознать что вообще такое указатель и зачем ему ссылка. всего за пять минут обьяснил главное понятным языком

  • @user-xc4vl5oj3n
    @user-xc4vl5oj3n 2 місяці тому

    Урааа

  • @developnya
    @developnya 3 місяці тому

    респект

  • @nbasked
    @nbasked Місяць тому

    Реально, такой классный канал, но так мало подписчиков(((

  • @BYGUR
    @BYGUR Місяць тому

    Как включить функцию size()? Чет тот же CodeBlocks ее подсвечивает, но выдает 'size' was not declared in this scope' (код один в один)

  • @alex_s_ciframi
    @alex_s_ciframi Місяць тому

    указатель - это переменная, которая хранит адрес.
    Во, даже в 5 секунд уложился :D
    Медленно печатаю

  • @fantik86
    @fantik86 2 місяці тому +2

    Посмотрев 20 минутное видео не поймешь как они работают. Практикуйтесь, друзья.

  • @goczt
    @goczt 23 дні тому +3

    Название видео: *Всё* об указателях в *С++*.
    Содержание видео:
    1. Беглый обзор Сишного (без ++) синтаксиса и применения указателей (за исключением new/delete вместо malloc/free)
    2. Ни слова об указателях на объекты-члены классов и на функции-члены классов
    3. Ни слова о том, что в современных плюсах явное использование delete считается дурным тоном (за исключением случаев, когда пишется класс непосредственно ответственный за управление памятью), предпочтение отдаётся RAII обёрткам, автоматически освобождающим память
    4. Ни слова об умных указателях и семантике владения
    5. Лишь вскользь упомянутые итераторы, которым отдаётся предпочтение в современных плюсах вместо арифметики указателей с C-style массивами
    6. Вроде как ни слова о проблемах double-delete/double-free (возможно прослушал и про это говорилось при имплементации списка)
    Предвкушаю ответ: "Но это видео для новичков и тут показаны основы!!!!"
    К видео было бы меньше вопросов, если бы оно называлось "Основы указателей в языке Си" или типа того.
    Некоторые комментаторы даже не поняли зачем вообще нужны ссылочные типы, потому-что толком не объяснены преимущества и недостатки динамического выделения памяти и такой структуры данных как связный список.
    Короче, типичный видос первокурсника, либо самоучки, начитавшегося всяких мусорных сайтиков "обучающих" С++. Желающим реально изучить плюсы и их практическое применение соболезную - качественного контента на русском языке именно для новичков лично я нигде не видел, можно посоветовать только почитать какое-нибудь свежее издание Страуструпа (и то скрепя сердцем - начинающим довольно трудно читается и редко когда дочитывается).

  • @Kaizenn89
    @Kaizenn89 2 місяці тому

    Привет, я недавно начал изучать с++ и складывается впечатление что гайдов куча, говорят на нем можно сделать что угодно но когда ищу фактические примеры то осознаю что на нем это либо сложнее в 10 раз чем на любом другом яп либо вообще не делают. Когда у меня появилась идея изучать программирование я не имел конкретных предпочтений, но сейчас захотелось написать хотя бы самую простую 2д пиксельную игру и тут то я узнал что делать игры на с++ та еще жесть... Думаю теперь, а не зря я начал изучать именно его..

    • @TherryYT
      @TherryYT 2 місяці тому

      Выбери сразу свое направление, с++ заточен для всего, но на нем это сложнее.
      Очевидно, что большинство фреймворков для тех же 2д игр написаны на с++, а ты используешь готовые функции, классы в другом языке.
      С++ невозможно выучить полностью, так что выбери направление

    • @mimocake
      @mimocake  2 місяці тому +2

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

    • @justman073
      @justman073 2 місяці тому +2

      Если ты хочешь написать простую пиксельную 2д игру, то лучше всего подойдёт связка Python + библиотека Pygame, Godot с языком программирования GDScript(похож на python) / C# или Unity / Unity WebGL с C#
      С/C++ лучше подходят для высокоскоростных или низкоуровневых(драйвера) продуктов, ещё с C легче изучать Язык Ассемблера

    • @dominuspiritus
      @dominuspiritus 2 місяці тому

      ​@@TherryYTдумаю если человек поработал с boost, корутинами, шаблонной магией и рекурсивным макросами, то плюсы он знает)

    • @user-ws1ud4op9i
      @user-ws1ud4op9i 2 місяці тому

      С++ просто мало что умеет из коробки. Есть куча библиотек и уже готовых решений. Надо лишь установить их и начать кодить

  • @_CrystalWave_
    @_CrystalWave_ 3 місяці тому +1

    Godnota

  • @earned3156
    @earned3156 2 місяці тому

    Го дальше

  • @lokomanako8830
    @lokomanako8830 2 місяці тому +2

    я что то не пойму, что сложного в указателях?

  • @user-ms3id7jv7v
    @user-ms3id7jv7v Місяць тому

    Для обывателя будет не очень подробно, например про константные указатели нужно было объяснить что конкретно можно менять, а что нет.

  • @O_0wLl
    @O_0wLl 3 місяці тому +2

    Понятно. А зачем он нужен? Почему я не могу делать тоже самое с обычными переменными?

    • @glasderes
      @glasderes 3 місяці тому

      попробуй реализовать связанный список без указателей

    • @ivanzuraulevic1916
      @ivanzuraulevic1916 3 місяці тому +2

      Если коротко, то чтобы не засрать стек.
      Если подробнее, то при вызове подпрограмм(процедуры, функции, методы) передаваемые переменные забрасываются в стек. Что в случае int'а мелочь, а вот в случае массива могут возникнуть проблемы. Особенно если используется рекурсия

    • @mimocake
      @mimocake  3 місяці тому

      Что именно "он"?

    • @doctor_livsi_pod_phonk
      @doctor_livsi_pod_phonk 3 місяці тому +1

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

    • @tulenich9948
      @tulenich9948 2 місяці тому +3

      Если тебе надо через функцию изменять переменную вне неё, то изменять её надо через указатель. Если отправить в функцию саму переменную, то в её рамках ты будешь изменять только копию этой переменной, и если ты вернёшься, то отправленная переменная останется нетронутой.
      Также полезно с массивами: из функции нельзя вернуть массив, поскольку если ты попытаешься, то ты вернёшь только указатель на неразмеченную память. Однако можно создать массив вне функции и отдать его ей, и она внесёт в него данные.
      Ещё можно создавать мыссивы через malloc(), который возвращает указатель на выделенную память в куче, которая не имеет ограничений стековой памяти и не зависит от рамок функций.

  • @wandemeir4394
    @wandemeir4394 3 місяці тому +1

    Про выделенную память не совсем верно. Тут скорее прикол в отличии стека и кучи (heap). На куче можно выделить и гигабайт и 20 если это нужно программе, размер же стека сильно ограничен (по-моему около 2 мегабайтов для линукса). Также в операционной системе есть специальные средства более эффективной работы с кучей, например запись в SWAP разделы. Поэтому современные языки программирования, в том числе и C++ тяготеют к тому, чтобы хранить указать на объект в стеке, а сам объект в куче.

    • @doctor_livsi_pod_phonk
      @doctor_livsi_pod_phonk 3 місяці тому

      в куче достаточно медленная память, причем в раз 800 медленнее. Есть L1 L2 L3 L4 памяти, прочитай

    • @doctor_livsi_pod_phonk
      @doctor_livsi_pod_phonk 3 місяці тому

      и 20 гигов никто выделять не будет, оперативка средняя у людей 16 гигов

    • @doctor_livsi_pod_phonk
      @doctor_livsi_pod_phonk 3 місяці тому

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

    • @doctor_livsi_pod_phonk
      @doctor_livsi_pod_phonk 3 місяці тому

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

    • @doctor_livsi_pod_phonk
      @doctor_livsi_pod_phonk 3 місяці тому

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

  • @Rick777a
    @Rick777a 17 днів тому

    Главный вопрос... Зачем??? Я не понимаю объясните

  • @tulenich9948
    @tulenich9948 2 місяці тому

    Конечно, я говорю о Си, но я вполне уверен, что в C++ точно так же:
    Неправильно декларировать указатели как:
    int* ptr;
    , поскольку если так декларировать несколько указателей одной строчкой:
    int* ptr1, ptr2, ptr3;
    , то на самом деле указателем будет только ptr1, а остальные - просто числами. Чтобы сделать их все указателями, надо делать:
    int *ptr1, *ptr2, *ptr3;
    Я сам не знаю, почему так, учитывая то, что по идее, указатель должен быть своим типом данных. Но, как я уже в сказал, это относится к Си, а C++ я не знаю.

    • @mimocake
      @mimocake  2 місяці тому

      Ну вообще да, если декларировать int* p1, p2, то это будет неправильно. Но если декларировать только один указатель, то компилятору будет все равно, где звёздочка, мне просто больше напиться писать int*

    • @tgitw-tq6iu
      @tgitw-tq6iu 2 місяці тому

      Глупость несусветная. Зачем ходить и повторять везде эти поверья? К тому же указатель не имеет никакого отношения к типу. Невежество порождает непонимание и всякие глупые поверья. И вместо того чтобы изучить тему люди бегают и доказывают необходимость всякой чуши.

  • @DaniilK-hq5go
    @DaniilK-hq5go 2 місяці тому

    Бро, фигню не неси. Статическая память в C / C++ это либо static переменные в скоупе (функции, класса и тд), либо то, что называется глобальными переменными (уже не важно static или нет, в данном случае ключевое слово влияет только на видимость переменной в других единицах трансляции).
    То что ты назвал статикой - локальная / стековая память.
    Почитай С. Прата, там подробно разъясняются эти темы.