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

Ғылым және технология

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

Пікірлер: 57

  • @glasderes
    @glasderesАй бұрын

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

  • @nelavas4651

    @nelavas4651

    Ай бұрын

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

  • @saikle_

    @saikle_

    Ай бұрын

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

  • @user-en6ey3mv2q

    @user-en6ey3mv2q

    Ай бұрын

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

  • @kotleni

    @kotleni

    Ай бұрын

    @@saikle_ Все мы...

  • @wizaral

    @wizaral

    26 күн бұрын

    Харош)))

  • @ryzen144
    @ryzen1445 күн бұрын

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

  • @JohnJTraston
    @JohnJTraston29 күн бұрын

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

  • @VoiCedml
    @VoiCedmlАй бұрын

    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;

  • @serb1146
    @serb1146Ай бұрын

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

  • @user-ws1ud4op9i

    @user-ws1ud4op9i

    Ай бұрын

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

  • @pl.elektronik
    @pl.elektronikАй бұрын

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

  • @vladimir_v_it
    @vladimir_v_itАй бұрын

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

  • @GagagJdjskk
    @GagagJdjskk29 күн бұрын

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

  • @fantik86
    @fantik8629 күн бұрын

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

  • @user-mz7gz2fq7g
    @user-mz7gz2fq7g28 күн бұрын

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

  • @yar444ik
    @yar444ikАй бұрын

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

  • @developnya
    @developnyaАй бұрын

    респект

  • @lokomanako8830
    @lokomanako8830Ай бұрын

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

  • @user-xc4vl5oj3n
    @user-xc4vl5oj3n28 күн бұрын

    Урааа

  • @Infinite_Kaizen
    @Infinite_KaizenАй бұрын

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

  • @TherryYT

    @TherryYT

    Ай бұрын

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

  • @mimocake

    @mimocake

    Ай бұрын

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

  • @justman073

    @justman073

    29 күн бұрын

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

  • @wizaral

    @wizaral

    26 күн бұрын

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

  • @user-ws1ud4op9i

    @user-ws1ud4op9i

    5 күн бұрын

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

  • @earned3156
    @earned3156Ай бұрын

    Го дальше

  • @_CrystalWave_
    @_CrystalWave_Ай бұрын

    Godnota

  • @wandemeir4394
    @wandemeir4394Ай бұрын

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

  • @doctor_livsi_pod_phonk

    @doctor_livsi_pod_phonk

    Ай бұрын

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

  • @doctor_livsi_pod_phonk

    @doctor_livsi_pod_phonk

    Ай бұрын

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

  • @doctor_livsi_pod_phonk

    @doctor_livsi_pod_phonk

    Ай бұрын

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

  • @doctor_livsi_pod_phonk

    @doctor_livsi_pod_phonk

    Ай бұрын

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

  • @doctor_livsi_pod_phonk

    @doctor_livsi_pod_phonk

    Ай бұрын

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

  • @O_0wLl
    @O_0wLlАй бұрын

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

  • @glasderes

    @glasderes

    Ай бұрын

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

  • @ivanzuraulevic1916

    @ivanzuraulevic1916

    Ай бұрын

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

  • @mimocake

    @mimocake

    Ай бұрын

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

  • @doctor_livsi_pod_phonk

    @doctor_livsi_pod_phonk

    Ай бұрын

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

  • @tulenich9948

    @tulenich9948

    Ай бұрын

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

  • @tulenich9948
    @tulenich9948Ай бұрын

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

  • @mimocake

    @mimocake

    Ай бұрын

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

  • @tgitw-tq6iu

    @tgitw-tq6iu

    15 күн бұрын

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

  • @DaniilK-hq5go
    @DaniilK-hq5go29 күн бұрын

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

Келесі