Уроки C++ с нуля / Урок #9 - Указатели и ссылки
HTML-код
- Опубликовано: 15 сен 2024
- В этом уроке мы с вами изучим указатели, а также ссылки в языке C++. Благодаря указателям, а также ссылкам мы можем достаточно хорошо оптимизировать код.
✔ Основной сайт: itproger.com/
✔ -------------
Вступай в группу Вк - prog_life
Группа FaceBook - goo.gl/XW0aaP
Instagram: / gosha_dudar
Telegram: t.me/itProger_o...
Страничка Twitter - / goshadudar
- Уроки от #GoshaDudar 👨🏼💻
- Все уроки по хештегу #GoshaCpp
Спасибо тебе большое. Ты сделал очень полезные курсы.
Я учусь дистанционно и пропустил несколько лекций по C++, но это видео очень помогло разобратся самому. Да и курс в целом. Кстати много кто в моей групе тоже смотрит твой контент.
Буду смотреть и дальше твой канал.
Спасибо ещё раз, ты сделал очень много полезной работы.
За эти девять уроков я услышал ихний и ихнюю столько раз, сколько не слышал всю жизнь
Повесть о том как говномутарий решил изучить программирование
За эти 9 уроков я узнал больше , чем за 9 лет в школе .
Ты в школе 9 лет учил c++?
Я в том смысле , что из этих 9 уроков получил больше знаний , чем за 9 лет в школе .
Y - NewGen
Мне тебя жаль...
Лооол, не умеет объяснять речь не поставлена, что-то понимает, но теорию корректно передать он не может
а ты ему платишь за уроки? если нет то твой комментарий здесь лишний
мелкие детали очень важны, и их нужно тоже обьяснять. "ptr все любят писать" - так себе объяснение. ptr - сокращение от pointer(указатель), можно писать, можно не писать, можно свой придумать
Ну так если ты такой умный, снимай свои курсы, которые и так никто смотреть не будет, ибо им не будет понятно то, что ты им говоришь. Он всё рассказывает на нашем понятном языке, а не на языке Википедии.
@@PersonaUserNew чего ты злой такой, дурень?
@@isengrym я не злой, приятно познакомиться дурень
@@PersonaUserNew Злой чел
Негативный
@@user-yv4up3jz9s согл
указателю, в отличии от ссылки ,можно присвоить NULL, тоесть оставить его пустым. К тому же они используются в языке C на котором основан C++. Также указатель можно возвращать как результат функции.Динамические массивы ,(да и обычные)основаны на указателях.
нужно было все же сперва рассказать про функции, а потом уже привести пример, что ссылки нужны дабы менять локальные переменные из одной функции в другой, а так нифига не ясно зачем они нужны...
Спасибо за урок дима
щас прохожу одну книжку, там тоже повествование начинается с указателей и адресной арифметики. вот только там подача другая, и всё понятно. когда дело дошло до массивов, у меня уже не было глупых вопросов.
@@mardukblack654 можно название книжки?
@@nevin777 самоучитель С++ с задачами и примерами. автор Васильев А. Н.
@@mardukblack654 Ну как идет у тебя прогресс?
14:00 указатель как бы копирует немножечко ;)))
Блик как бы Гошу Дударя не ругали но это единственный человек еоторый логично обьяснил всю эту хрень. до этого смотрел видеоуроки и читал книгу - логики не нашёл, здесь всё стало ясно! Спасибо чувак, ты лучший!
Значит ты тупой, если не можешь понять смысл книги и понимаешь вот эту хрень по типу: "Вот эта вот такая вот хрень чтобы было, потому что все используют и вы пишите, да c++ топ"
Указатель это как ярлык программы который указывает на .exe файл.
О спасибо тебе сын мой, пускай сам Бьёрн Страуструп пожмет тебе руку... Ну ты понял😂
@@glorytoukraine429 😂😂😂😂
@@glorytoukraine429 ( спасибо что напомнил... Я вообще по забыл уже об этом коменте )
@@yukinakiu739 напоминаю
@@yukinakiu739 да
В чем практическое применение, в данном примере выглядит как бесполезная вещь?
Zhivoder экономия памяти, меньше переменных
Ускорение работы программы
работа с функциями, работа с массивами.с методами адресной арифметики работа с массивами проходит быстрее, чем с методами обращения по индексу.
@@ТимурАббасов-т5н переменных как раз то больше
Чтобы в другой функции можно менять переменную в другой
Видео довольно неплохое, хоть и запутанное
15:05 шок контент! правильное произношение местоимения ИХ
Я даже паузнул, что бы переварить это) обычно я скипаю видео, где ораторы говорят таким образом, но видео действительно крутое) спасибо автору)
Зачем использовать указатель, если можно работать с переменной на прямую?
Всё доступно понятно, большое спасибо за уроки!!!
а можете пожалуйста сам код ближе показывать)
Аутист?
EnderSlend это мне говорит майнкрафтер
Артем Наумчук я не играл в майнкрафт около 3 лет ну да ладно
Vova Malikov «надевайте»!!!
если с телефона смотреть уроки - очень плохо видно,
А зачем они нужны если можно напрямую ссылаться на переменные?
Насколько я понимаю, намешал тут в кучу указатели и разадресацию. И для одного, и для другого используется "*", но int *ptr = &a - это указатель на адрес ячейки, где сидит а, а cout
Незнающий человек никогда в жизни не поймет, что такое указатель и какой принцип его работы, из этого объяснения. Смотрю чисто чтоб что-то вспомнить, для новичков это вообще не ало
Но я же понимаю))
Я новичок, знал все только до массивов, но все прекрасно понимаю
Спасибо за видео! Как доп материал к учебе подходит)
Не передаём данные, а передаём адрес, где лежат данные. И уже в функции можно посмотреть по этому указателю/адресу, что там находится.
Большое спасибо!
Все же я бы наверно после функций проходил указатели и сылки.
Спасибо, очень помогло!
полезное видео,спасибо;)
Надо было показать более наглядный пример.
int m = 0;
int *ptrm = &m;
int test = m;
cout
Да ты ж моя умница, ты пипец как мне облегчил обучение!
То есть,при любом изменении переменной m,его указатель будет меняться,в то время как переменная test со значением m(то есть 0) будет всегда со значением 0.Мда.Спасибо,твой пример многое сказал.
При смене переменной m переменная b не меняется, а остается 0
Тем временем *ptrm при втором выводе после m = 50; смотрит на значение m и выводит его.
я это и написал
Спасибо огромное за урок !!!
Нифига не понял, но спасибо за урок)
ptr - сокращение от pointer(указатель), можно писать, можно не писать
ptr -> pointer
очень понятно и подробно. Спасибо тебе. Узнал больше, чем за сем в унике.
Я немного не понял, когда лучше использовать указатели, а когда лучше использовать ссылки? Извиняюсь, если вопрос глупый, я в этих делах новичок..
Ты не глупый, это автор не ответил, в чём разница
@@aranime7189Да, уверен, многим приходится с помощью chatgpt добивать
Хакеры: взломали тебя, хотят сменить твой пароль. Также констант
Объяснение не очень. Вообще-то есть методички для преподов, где действительно понятно все описано . А лучше посмотреть лекции известных универов мира, только не руцких. Потому что у скрепов препод например спрашивает ,что такое указатели?.И если хоть один ответит правильно он пропускает тему об указателях.
самые понятные уроки по программированию. Спасибо!
кто-нибудь сможет мне объяснить, зачем нужен указатель на указатель?
Указатель на переменную указывает на адрес переменной в памяти , а указатель на указатель указывает на адрес указателя в памяти. Иными словами если вывести ptrvalue и ptr_ptrvalue будут разные адреса.
@@user-zh1sb8we5i спасибо, после таких обьяснений я думаю любой даун теперь поймет
@@user-zh1sb8we5i а нафиг нужны адреса?
@@yaderry ужас, просто ужас!!!!!!!!!!!!!!!!!!!
@@ruslanvolovik2745 что те надо?
Уроки интересные, но очень тяжелые темы без практики не закрепить, вроде указателей и ссылок.
"Есть ссылки в описание" это мы поняли а где указатели?
Я так и не понял зачем нужны указатели/ссылки, можно же просто использовать сами переменные. Разве нет?
Вячеслав Программист чтобы код оптимизировать, епту
Ну ты же програмист
*9:09** Почему мы ставим &, ведь адресом *ptrvalue является ptrvalue, а не &ptrvalue ?*
Я сам учусь ,но как сам понял & это типо указатель на переменную ,а * ставятвся по дефолту что бы показать что это указатели (я могу ошибаться т.к. сам только учу)
спасибо огромное
Посмотрел два раза понял!
КРАСАВЕЦ!!!
Огромное спасибо интересно)
я один не понял разницу между ссылкой и указателем ?
ссылкой можно только показать, указателем еще и задать.
Ссылка ссылается на переменную.
я все думал что он говорит пельменная )
У них разницы почти нету, только что компилятор вычисляет по другому и все.
Ты разницы в этом не увидишь
@@user-io7vy6pg7k ссылку уже не изменишь, а указатель, точнее адресс можно другой переменной ему присвоить, короче: const char *p = &a тоже самое что и char &r = a
Проблема с вводом с клавиатуры в xcode - не отображается ввод. Кто-нибудь знает, как решить?
Не ихняя а евошняя, но можно и евонная
ИХНИЮ разницу
В строке
cout
Я в своей простенькой програмке сначала объявил переменные и константы (глобально), а в функциях впихал указатели на них. Но размер готового приложения не уменьшился, а даже увеличился.
Потому что указатель хотя и будет типа например unsigned char, он все равно будет занимать 4 байта, в некоторых системах даже 8 байта в 64 битных, это нужно для нормальной адресации, да и адресс просто может и не поместиться в unsigned char тот тип который у тебя елементы в непрерывной области памяти по смещению х нахрдятся, да и не только
Единственное что не понял, то почему чтобы найти адрес указателя то можно было не писать &, а как инициализируем **, то надо писать &?
Я вопрос не понял
зачем писать int main(int argc,const char...)?
А почему &value и ptrvalue указывают на одну область памяти, а ptr_ptrvalue на другую?
2 разные переменные
извини, но ты херово объясняешь, надо было сразу сказать, что амперсанд с именем переменной возвращает адрес, а не мычать, что "ну ээээ ну тут вот мы переходим к значению через вот это вот ээээ", в общем с постановкой речи проблема и шрифт увеличь, а то под лупой надо смотреть
мне 10 лет изучаю с++ надеюсь что когда я выросту с++ не постареет и я смогу по ниму программировать
ответье пж
@@kiberonel3069 Ответил
@@kiberonel3069ну как?
Просто ужасно. Пишите сценарий к видео и строго следуйте ему, все очень неструктурировано и запутано. Ноль объяснений лишь непонятный набор слов: "делаем так", "так нужно", "очень много всяких символов" и т. д.
А у меня в Visual Studio не распознает ссылки. Все сделал правильно, но оно мне все равно подчеркивает красной волнистой линией. Может поможет кто?
#include "stdafx.h"
#include
using namespace std;
int main()
{
const float pi = 3.14;
int value = 8;
int &ref = value;
// выше находится ссылка. нужна для прямого доступа.
//int *ptrvalue = &value; ----указатель
//int **ptr_ptrvalue = &ptrvalue;
//cin >> **ptr_ptrvalue;
cin >> ref;
cout
Вероятно, Вы работает не с C++, а с чистым C. В чистом C ссылок нет.
смотря какого года программа ... может старая версия использует только С
Я не понимаю зачем нужны указатели на указатели, скажите кто-то пожалуйста если знаете
Обязательно использовать именно ptr для указателя ?
Нет
nooooooo
Что за среда у тебя? Visual c++?
Xcode
так и не понял для чего эти указатели и ссылки нужны
чтобы при передаче в функцию массива работать с ним, и чтобы при передаче в функцию например переменной не создавать её копию, а потом возвращать из функции значение обратно, а напрямую работать с изначальной переменной через ссылку.
А можно как нибудь установить Xcode на Windows??
нет
а зачем нужны указатели тогда?
Кто нибудь может понятно обьяснить нахера нужны собственно эти указатели?
Никаких объяснений, по поводу мелких деталей
Можно задать вопрос? Зачем делать указатель на указатель))
Потому что нет ссвлки на ссылку, надеюсь
Чтобы изменить указатель, передав указатель на указатель. Это один из "паттернов" С++, про который я рассказываю на своём курсе. Заходи!
Это как предложение, состоящее из слов вот тебе пример указателя на указатель
@@ruslanvolovik2745 Нет, предложение более уместно представить как последовательность слов (например, массив, или список). А указатель на указатель я обычно передаю в функцию как параметр для того, чтобы вернуть указатель из такой функции. Это позволит мне перезаписать значение указателя, обратившись к нему через указатель на указатель. Такой "паттерн" очень удобен для возврата указателей из функции.
@@AlexanderSemenko какото бредово... предложение = набор слов, слово = указать, соответственно преложение это указатель на указатель, причем здесь пример из функциями, а указатель на функцию в структурах тоже вариант, ... да уж...
С указателями ничего не понял
После SHIFT восемь не выдержал
И как же мы копируем?
А восьмёрка по моему не нужна и так работает?;
Помогите кто нибудь
пишет "one or more multiply defined symbols found"
вот код
#include
using namespace std;
int main() {
int value = 8;
int &ref = value;
cin >> ref;
cout
cin >> ref;
Ты забыл амперсант (&)
копируется немножко)))
Ths
а нельзя ли вот так:
int value = 8
int value2 = value
Можно конечно
не очень понял
Указатель на указатель, """"
11:17 ИХНИМ)))))))))))))))))))))))))))
Как-то затянуто
Умеет один вопрос. Где используются эти указатели?😹
Указатель копирует данные переменной и сжимает их. Тоесть программа весит меньше
@@qwendamned69 указатель и копирование это совершенно не совместимые и близко вещи
@@qwendamned69 Указатель не сжимает данные. Заходи ко мне - и ты узнаешь, как они используются
Указатели - это очень полезная особенность языка С++. Например, мне нужно загрузить в память картинку размером 1 Мегабайт, и показать её в 10 местах на экране. Вместо того, чтобы 10 раз грузить большую картинку, я загружу её в память 1 раз, и передам на неё 10 указателей, что сильно сэкономит память программы (и увеличит скорость загрузки). А вообще - заходи ко мне, и я расскажу про указатели и другие классные штуки!
@@AlexanderSemenko ок
Бездарнее и безграмотнее, чем этот "лектор", я ещё не слушал.
2
Я один не понимаю зачем указатели и ссылки?😟😟😟
Дмитрий Нестеров что бы запрашивать динамически выделяемую память у ОС (размер которой не известен во время написания программы: ввод пользователя, такой как строки текста, координаты объектов в 2d и 3d редакторах и прочее). Функции выделения памяти ОС возвращает указатель (адрес) буфера в памяти (у каждой ячейки памяти в микросхемах есть адрес - порядковое число, выставляя на проводки шины адреса это число (в двоичное системе исчесления ) процессор запрашивает данные у памяти). Также с помощью типов данных "структура" и указателей (одна переменная указатель в структуре хранит адрес другой структуры ) можно создавать цепочки связанных динамически изменяемых (по количеству и по связям) данных (списки, деревья, очереди и т.д) которые в свою очередь нужны для хранения, быстрого поиска, анализа данных. Вообщем там где нужна динамика и связи нужны и указатели. Ссылки почти то же самое, разница в деталях.
Нахрена это нужно, нельзя просто сделать
Value1 = value2
Всё.
Или через гет/set
Agelast для оптимизации. Чтобы на каждую переменную не тратить память
Какая оптимизация? Память на переменные? Ты знаешь сколько на переменные тратится памяти? Меньше 1 килобайта. Алё, мы не в 70ых годах, пора адаптировать обучение под современные реалии. Это ничтожное количество, что для современных компьютеров не имеет значение вообще
@@gamedev6290 ну ну, когда у тебя будет массив на терабайт, я посмотрю на тебя, как оптимизация не нужна
указатель правильней пишется так int* ptrc = &pravelno;
Разницы нету, компилятор понимает и так и так, человеку удобно так обьяснять
Компиятор твоих переменных даже не понимает, и ось тоже, можеш писать даже так unsigned short int const *hello_world = "hello world";
сможешь создать игру симулятор загрузки экрана
не слушайте этот бред, лучше нормальную книжку почитайте
Посоветуй, пожалуйста, нормальную книжку по С++
Он сам видимо еще не прочитал, поэтому ответа не жди)
Обоснуй свои слова. Либо ты сейчас сам говоришь бред.
@@idontknow_ Когда наберешься опыта, то увидишь сам, что всякие дудари - дно. А книжки 100% читать надо + статьи.
читал Прата , отдал штуку гривет (это на 2019 это 40 баксов юса приблизительно) - и там на эту тему таааакой бред что и на уши не натянеш. мало того что опечатки такещё и логика нелогичная совсем, если хоч я могу даже пример привести как они пишут... Так что лучше слушайте Гошу - лучше и понятней вы врятли где найдёте разве что у частного репетитора
ужасная подача. Видно, что ни сценария нет, ни подготовки, ни монтажа особо
очень нудно.
указателю, в отличии от ссылки ,можно присвоить NULL, тоесть оставить его пустым. К тому же они используются в языке C на котором основан C++. Также указатель можно возвращать как результат функции.Динамические массивы ,(да и обычные)основаны на указателях.
Разве не nullptr ??
это по новому стандарту
Большое спасибо!