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

  Рет қаралды 85,513

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

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

Күн бұрын

Пікірлер: 101
@avilayn
@avilayn Жыл бұрын
мне нравится как объясняет автор, лишь на объяснениях автора пока у меня выходит писать код, делаю задачи озвученную автором, код у меня иногда выходит не такой же как у автора, но работает, почувствовал что уже программист хах, сверил осмыслил переписал
@makeyourgame2210
@makeyourgame2210 3 ай бұрын
Пожалуй, лучшее объяснение указателей и ссылок, которые вызывают у многих достаточно сложностей
@ГлебШумигай
@ГлебШумигай Жыл бұрын
Автор молодец, так качественно делает ролики. Жалко что так мало актива.
@kpanat
@kpanat Жыл бұрын
Хорошей аналогией адреса является номер почтового ящика... Это просто число. Но надо иметь ввиду что эти номера идут подряд от 0. Память в компе это нумерованные ячейки по 1 байту которые идут подряд. Если мы указываем адрес то мы говорим что в ячейке с таким номером лежат наши данные. Точнее данные лежат в ячейках памяти начиная с такого-то номера отсчитанные от 0. Потому что данные не всегда занимают 1 байт а обычно больше и потому занимают не 1 ячейку, а больше. Но эти ячейки всегда начинаются с адреса памяти этих данных. Ничего сложного в адресах нет. Это оч простая вещь если понять. Просто этих ячеек памяти в компе дофига и потому числа получаются оч большие...
@user-a43ef53d
@user-a43ef53d 13 күн бұрын
уфффф.. наконец-таки я понял зачем в функциях получаемых из IDA куча лишних параметров вместе с указателями... наконец-таки понял что такое указатель и как с ним играть.. авесоме..
@ahmedikahmedabad9154
@ahmedikahmedabad9154 Жыл бұрын
автор уже как родной
@ОльгаЮрова-е9к
@ОльгаЮрова-е9к 7 ай бұрын
//дАДАДАДАДАДАДДА while (true) std::cout
@OTKA3
@OTKA3 6 ай бұрын
@@ОльгаЮрова-е9к int main() { while(true) { std::cout
@Tlay_Minecraft
@Tlay_Minecraft 5 ай бұрын
Вы не подключили
@desidemeokla
@desidemeokla 5 ай бұрын
@@Tlay_Minecraft Я думаю, всем итак понятно
@Maxnv_0
@Maxnv_0 4 ай бұрын
Программа уйдёт в бесконечный цикл и выдаст ошибку
@rustamBegushchiy
@rustamBegushchiy Ай бұрын
Огромное спасибо! Твои видео очень помогают
@ElianaAsato
@ElianaAsato 2 ай бұрын
Спасибо за урок, очень понятно объяснили!
@m1nd-s7k
@m1nd-s7k Жыл бұрын
20:50 можно просто написать условие if (arr[i] < min)
@catanonimus7
@catanonimus7 Жыл бұрын
Нельзя, это указатель на элемент, а не сам массив
@kpanat
@kpanat Жыл бұрын
Это негласное правило по которому вы * пристыковываете с типом или с переменной определяет шарпист Вы или плюсовик. если вы пишете так int* a, то Вы шарпист, а если int *a, то плюсовик... А некоторые пишут так: int * a. Но это тоже плюсовик, но продвинутый. Такая запись подчёркивает тот факт что это именно указатель а не что-то ещё.
@ivan_naitoraito
@ivan_naitoraito 18 күн бұрын
и выглядит это как умножение int на a.... По-моему бред)
@SpaceLexaDnepr
@SpaceLexaDnepr Жыл бұрын
Спасибо
@Remington-og3tf
@Remington-og3tf Жыл бұрын
Это было полезно!
@TestTest-fi2ok
@TestTest-fi2ok 7 ай бұрын
Все понятно, кроме одного, где на практике нужно использовать ссылки? В каких случаях?
@ivan_naitoraito
@ivan_naitoraito 18 күн бұрын
там, где не нужны указатели 😀
@w0njet
@w0njet Жыл бұрын
22:10 у меня код в точь точь как у тебя но минимальный елемент 5 хотя там тоже есть -2. Помоги
@baldeg_
@baldeg_ Жыл бұрын
просто он гавнокодер и написал полную залупу, массив всегда передается как указатель , поэтому толку от int *arr нету, если говорить про ссылку на переменную, то это вообще пиздец, так никто не делает, из-за этого только путаница будет в коде
@AmarokSKB
@AmarokSKB 2 ай бұрын
@@baldeg_ он с переменной сделал как пример для пояснения, на деле никто ж не будет на переменную указывать
@vadimgreen3738
@vadimgreen3738 6 ай бұрын
можно вопрос? я в принципе понял, как работает последний пример. Но в функции в параметрах записано int * arr - получается тип данных - это указатель на int. А сам массив у нас не задан указателем, то есть выделением памяти - он задан просто, без указателя - int arr[]. Почему так? а не изначально int * arr = new int(len) и потом в функции полноправно использовать созданный указатель. Возможно я чего-то не знаю, или не понял. Но уже полгода программировал в универе и вроде бы так было правильно
@woomy_squid
@woomy_squid 6 ай бұрын
Зачем нужны ссылки, если есть указатели?
@kookaburru
@kookaburru 2 жыл бұрын
minval(int arr[]) и (int *arr) одно и тоже. Массив всегда передается как указатель.
@SolarSystem_sUser
@SolarSystem_sUser 7 ай бұрын
тоже на этом моменте не понял автора. в каком месте массив начинает занимать место дважды... по идее адрес у него один всегда.
@redoboly
@redoboly 5 ай бұрын
а можно также с векторами делать надеюсь?
@AndriiTurchynRieltorDnipro
@AndriiTurchynRieltorDnipro Жыл бұрын
дякую
@Vanek305
@Vanek305 6 ай бұрын
А как вывести двумерный массив с помощью указателей?и трёхмерный
@SpeedCuber______
@SpeedCuber______ 4 ай бұрын
А ты попробуй сам до этого дойти, ты программист)))0)
@deniszaltsberg2127
@deniszaltsberg2127 Жыл бұрын
а зачем нужны вообще ссылки? ну типо у меня есть значение в одной переменной с названием X, и все что дают ссылки это менять значение X меняя Y.
@ГусевАлександр-у1л
@ГусевАлександр-у1л Жыл бұрын
Согласен, по сути только для того чтобы не занимать лишнюю память, но в тоже время если я допустим захочу изменять значение которое в себя принимает переменная, отдельно от ссылки. То изменяться будут оба значения и ссылки что в принципе логично и переменной. Тоже самое и с переменной. Сам особо не пойму где можно использовать. Другое дело указатели, реально полезная штука если разобраться.
@jcdfce2707
@jcdfce2707 Жыл бұрын
@@ГусевАлександр-у1л один из вариантов применения - для создания псевдонима переменной. Например, вы дорабатываете чужой код, вам надо доработать код, функцию или метод, а предыдущий программист не сильно заморачивался с именами переменных и вместо rentpay (это просто пример, Оплата ренты) написал имя переменной одной буквой r, соответственно листать весь код и менять везде имя переменной вы не будете, вы просто создаете ссылку на переменную r и работаете с удобным и читаемым именем переменной.
@RadaCasian-ep8ht
@RadaCasian-ep8ht Жыл бұрын
Как можно пройти курс c++ у вас ?
@AmarokSKB
@AmarokSKB 2 ай бұрын
на их сайте за дэнбги
@horhegarsia4221
@horhegarsia4221 Жыл бұрын
Вот 5:11 у Вас же восьмибайтовый адрес переменной ))
@novichok3417
@novichok3417 6 ай бұрын
8 байт это 8 бит 8 раз получается 64 символа . Там 64 символа?
@kpanat
@kpanat Жыл бұрын
В ссылке на переменную нет смысла если мы не используем полиморфизм. Потому что мы получаем фактически другое имя для неё. Это бесполезное действо. Более того вносит путаницу в код. Поэтому так никто не делает.
@ФруЛо
@ФруЛо Ай бұрын
Не понял зачем нужна переменная len ? Почему нельзя указать что i < 5 ? И почему показывает ошибку
@xLisiq
@xLisiq 17 күн бұрын
Конкретно тут не нужна, но в целом полезная штука, как задел на будущее, особенно если нужно будет постоянно дёргать эту функцию и переменную в автоматическом режиме. Не уверен как в C++ это сделать, но в C# можно было бы записать как int len = array.Length и получить обновляемую при каждом вызове функции переменную, которая переходила бы в void minimal автоматически. Как пример из практики - что-то подобное я делал из List'ов когда писал плагин для одной игры, который получал SteamID64 игроков и сортировал их по количеству убийств/смертей с записью в JSON файл.
@SolarSystem_sUser
@SolarSystem_sUser 7 ай бұрын
не понятно почему созданный массив передается в функцию и там занимает еще раз место. у него меняется адрес? он дублируется? что происходит при передаче массива в функцию, что он занимает еще раз место в памяти... этот момент не раскрыт. имхо.
@ЭКОНОМкласс-б4ъ
@ЭКОНОМкласс-б4ъ Жыл бұрын
что такое "len"? подскажите пожалуйста в каком уроке его проходили? (16:30)
@ДианаКривнюк-п9н
@ДианаКривнюк-п9н Жыл бұрын
len - это название, которое означает количество элементов в массиве. На его месте можно было бы написать любое другое название))
@ЭКОНОМкласс-б4ъ
@ЭКОНОМкласс-б4ъ Жыл бұрын
@@ДианаКривнюк-п9н благодарю
@ЭКОНОМкласс-б4ъ
@ЭКОНОМкласс-б4ъ Жыл бұрын
ааа понял! во я туп туп)
@martinslepynin7959
@martinslepynin7959 9 ай бұрын
всем привет ответьте на вопрос почему if (min>*(arr+i)); происходит смещение указателя а не сложение элемента массива с i
@5классвиленкин-ъ4п
@5классвиленкин-ъ4п 9 ай бұрын
Потому что никакого элемента массива нет
@novichok3417
@novichok3417 6 ай бұрын
Потому что arr это адрес первой ячейки массива элемент массива и меет длину 4 байт. Через 4 байт начинается второй элемент массива и переменная i это 4 байта тоесть каждый раз адрес увеличивается на 4 байта (для int, для других типов другая)
@defolt7
@defolt7 Жыл бұрын
не понял, а почему у меня пишутся разные адреса одной и той же ячейки, то есть не как у вас
@Непрофессионалымы
@Непрофессионалымы Жыл бұрын
народ почемк я добавил отрицательные числа в массив, но метод минимум выводит лишь минимальное положительное число?
@doctor_livsi_pod_phonk
@doctor_livsi_pod_phonk Жыл бұрын
Возможно у тебя unsigned int, что значит беззнаковый int, но тогда бы ты не смог инициализировать переменную отрицательным значением, поэтому ответа на твой вопрос нету)) если ты сделал также как в видео разумеется
@Непрофессионалымы
@Непрофессионалымы Жыл бұрын
@@doctor_livsi_pod_phonk я уже нашел косяк) не помню где был. но спасибо
@blackdragon7405
@blackdragon7405 6 ай бұрын
@@doctor_livsi_pod_phonkкстати нет если unsigned int передать минусовой Int то он выведет по модулю значения от максимального int вроде: unsigned int num = -1; std::cout
@woomy_squid
@woomy_squid 6 ай бұрын
Не понял, почему ptrval вывел 20 после обнуления
@Gllory
@Gllory 5 ай бұрын
Обнулился Только с *, а переменная осталась
@solomr2013
@solomr2013 2 жыл бұрын
Гоша, чтобы ты порекомендовал Линукс или виндовс для программирования если выбирать что то одно?
@zomsofficial
@zomsofficial 2 жыл бұрын
Для программирования FREEBSD там нечему ломаться и нагружать пк
@linuxoidovich
@linuxoidovich Жыл бұрын
Каждому удобнее разное, но в линуксе есть удобные пакетные менеджеры, возможность быть на musl, а не glibc, там хорошо работают тайлинговые wm, которые ускоряют разработку и повышают удоство.
@raldbthar
@raldbthar Жыл бұрын
Зачем вводить людей в заблуждение, ссылки ничего не хранят, а вот как раз указатели могут хранить адрес. Ссылка это ещё одно название для переменной или alias
@Morena-ok8fg
@Morena-ok8fg Жыл бұрын
если бы на ваш коммент, я бы так и не поняла ничего. Благодарюююю)))
@Lol_12246
@Lol_12246 Жыл бұрын
Вы случайно не знаете видео или статью где подробнее объясняют эту тему. А то как то хреново объяснил тему. "Просто запомните", даже не объяснил как толком это работает.
@ivan_naitoraito
@ivan_naitoraito 18 күн бұрын
привет, вы год назад писали тут, это всё ещё актуально? или все же автор прав? Просто судя по выводу на экране ссылка все же хранила адрес переменной на которую ссылалась. ChatGPT подскзаал следующее: "Компилятор скрывает детали работы ссылки, но, по сути, ссылка внутри реализована как указатель на объект. Она оперирует адресом объекта, но сама по себе не дает прямого доступа к этому адресу."
@raldbthar
@raldbthar 18 күн бұрын
@@ivan_naitoraito Привет, конечно актуально. В независимости от того как ссылка реализована компилятором, мы, как разработчики, должны использовать ссылку как эту переменную, это просто псевдоним, ещё одно название для переменной, и больше ничего
@МишаМасленченко
@МишаМасленченко 8 ай бұрын
А C++ плохо не станет если я напишу int e = 1 int &a = e + 1 ?
@novichok3417
@novichok3417 6 ай бұрын
Я думаю нет . Выполнение начнётся с права налево : переменная e увеличится на единицу и адрес переменной e запишится в переменную a
@Nero22834
@Nero22834 4 ай бұрын
Так и не понял в чем разница между ссылками и указателями
@ЮраНиколаев-ц2в
@ЮраНиколаев-ц2в Жыл бұрын
А нельзя было поставить ссылку на весь массив ?
@novichok3417
@novichok3417 6 ай бұрын
Адрес перввог элемента и есть ссылка на весь массив
@vasyanpro8848
@vasyanpro8848 Жыл бұрын
как добавились эти указатели все перепуталось, и простейшие программы теперь вообще не понятны(
@maywx
@maywx 2 жыл бұрын
можно ли делать игры с движком unity на c++?
@aram2010uk
@aram2010uk 2 жыл бұрын
Нет unity только с c#, c++ можно использовать в unreal engine
@maywx
@maywx 2 жыл бұрын
@@aram2010uk спасибо
@El_Cuero
@El_Cuero 2 жыл бұрын
Здравствуйте, скажите пожалуйста, почему Ваш сайт не открывается?
@Arh-s2q
@Arh-s2q 8 ай бұрын
Я его взломал
@bahromjonabdusamatov8501
@bahromjonabdusamatov8501 2 жыл бұрын
Круто
@Александр-к8б9ж
@Александр-к8б9ж 2 жыл бұрын
Подскажи пожалуйста какой фреймворк выбрать для написания скринера на python для торговли на крипте?
@linuxoidovich
@linuxoidovich Жыл бұрын
С нуля писать можно.
@horhegarsia4221
@horhegarsia4221 Жыл бұрын
Если подумать. Разрядность процессора - 64, значит, в теории, размер оперативной памяти может быть очень большим (тип long, т.к. 8 * 8 = 64). Получается, чтобы хранить адрес ячейки памяти необходимо 8 байт. Верно? Теперь по поводу ссылок: гораздо нагляднее был бы пример с пользовательсим вводом внутри пользовательской функции, которая принимает параметр-ссылку и ни чего не возвращая, меняет значение по ссылке.
@defolt7
@defolt7 Жыл бұрын
все понял лишний амперсант написал
@RodjerX
@RodjerX 2 жыл бұрын
Я думал, что запись *(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 Жыл бұрын
Про указатели и ссылки вообще не понятное объяснение.
@parabox3176
@parabox3176 Жыл бұрын
Полностью скопировал код из видео, код не работает. Ни черта не понимаю. Программирование это весело.
@amerigovespucci1499
@amerigovespucci1499 Жыл бұрын
chatGPT в помощь
@w0njet
@w0njet Жыл бұрын
У меня тоже. Исправил ошибку? Если да, помоги пожалуйста.
@parabox3176
@parabox3176 Жыл бұрын
@@w0njet Неа. Я забил на неё.
@w0njet
@w0njet Жыл бұрын
​@@parabox3176я нашел ошибку (chatgpt точнее) ты скорее ошибся когда писал код в функции, по крайней мере я там ошибся. Я написал (*arr + i) а надо было *(arr + i), сорян если я не понятно объяснил
@hxntaininja
@hxntaininja Жыл бұрын
Нихуя не понятно
@maasimada
@maasimada 11 ай бұрын
согласен
@w0njet
@w0njet Жыл бұрын
22:10 у меня код в точь точь как у тебя но минимальный елемент 5 хотя там тоже есть -2. Помоги
@w0njet
@w0njet Жыл бұрын
Я нашел ошибку 😂
@hiwinner9467
@hiwinner9467 Жыл бұрын
у меня такое же, в чём была ошибка?@@w0njet
@hiwinner9467
@hiwinner9467 Жыл бұрын
Всё, нашёл в чём проблема) Я вместо i , написал 1
@Arh-s2q
@Arh-s2q 8 ай бұрын
А я не нашëл
@ZxcPudge-i8t
@ZxcPudge-i8t 7 ай бұрын
@@Arh-s2q нашел ошибку?
Изучение C++ для начинающих / #13 - Работа с файлами при помощи C++
12:40
Школа itProger / Программирование
Рет қаралды 71 М.
Изучение C++ для начинающих / #14 - Структуры данных
12:54
Школа itProger / Программирование
Рет қаралды 60 М.
КОНЦЕРТЫ:  2 сезон | 1 выпуск | Камызяки
46:36
ТНТ Смотри еще!
Рет қаралды 3,7 МЛН
Вопрос Ребром - Джиган
43:52
Gazgolder
Рет қаралды 3,8 МЛН
Their Boat Engine Fell Off
0:13
Newsflare
Рет қаралды 15 МЛН
How I wrote online shooter on C++ in a week
25:31
Vectozavr
Рет қаралды 1 МЛН
Изучение C++ для начинающих / #10 - Создание функций в языке C++
17:41
Школа itProger / Программирование
Рет қаралды 96 М.
КОНЦЕРТЫ:  2 сезон | 1 выпуск | Камызяки
46:36
ТНТ Смотри еще!
Рет қаралды 3,7 МЛН