мне нравится как объясняет автор, лишь на объяснениях автора пока у меня выходит писать код, делаю задачи озвученную автором, код у меня иногда выходит не такой же как у автора, но работает, почувствовал что уже программист хах, сверил осмыслил переписал
@makeyourgame22103 ай бұрын
Пожалуй, лучшее объяснение указателей и ссылок, которые вызывают у многих достаточно сложностей
@ГлебШумигай Жыл бұрын
Автор молодец, так качественно делает ролики. Жалко что так мало актива.
@kpanat Жыл бұрын
Хорошей аналогией адреса является номер почтового ящика... Это просто число. Но надо иметь ввиду что эти номера идут подряд от 0. Память в компе это нумерованные ячейки по 1 байту которые идут подряд. Если мы указываем адрес то мы говорим что в ячейке с таким номером лежат наши данные. Точнее данные лежат в ячейках памяти начиная с такого-то номера отсчитанные от 0. Потому что данные не всегда занимают 1 байт а обычно больше и потому занимают не 1 ячейку, а больше. Но эти ячейки всегда начинаются с адреса памяти этих данных. Ничего сложного в адресах нет. Это оч простая вещь если понять. Просто этих ячеек памяти в компе дофига и потому числа получаются оч большие...
@user-a43ef53d13 күн бұрын
уфффф.. наконец-таки я понял зачем в функциях получаемых из IDA куча лишних параметров вместе с указателями... наконец-таки понял что такое указатель и как с ним играть.. авесоме..
@ahmedikahmedabad9154 Жыл бұрын
автор уже как родной
@ОльгаЮрова-е9к7 ай бұрын
//дАДАДАДАДАДАДДА while (true) std::cout
@OTKA36 ай бұрын
@@ОльгаЮрова-е9к int main() { while(true) { std::cout
@Tlay_Minecraft5 ай бұрын
Вы не подключили
@desidemeokla5 ай бұрын
@@Tlay_Minecraft Я думаю, всем итак понятно
@Maxnv_04 ай бұрын
Программа уйдёт в бесконечный цикл и выдаст ошибку
@rustamBegushchiyАй бұрын
Огромное спасибо! Твои видео очень помогают
@ElianaAsato2 ай бұрын
Спасибо за урок, очень понятно объяснили!
@m1nd-s7k Жыл бұрын
20:50 можно просто написать условие if (arr[i] < min)
@catanonimus7 Жыл бұрын
Нельзя, это указатель на элемент, а не сам массив
@kpanat Жыл бұрын
Это негласное правило по которому вы * пристыковываете с типом или с переменной определяет шарпист Вы или плюсовик. если вы пишете так int* a, то Вы шарпист, а если int *a, то плюсовик... А некоторые пишут так: int * a. Но это тоже плюсовик, но продвинутый. Такая запись подчёркивает тот факт что это именно указатель а не что-то ещё.
@ivan_naitoraito18 күн бұрын
и выглядит это как умножение int на a.... По-моему бред)
@SpaceLexaDnepr Жыл бұрын
Спасибо
@Remington-og3tf Жыл бұрын
Это было полезно!
@TestTest-fi2ok7 ай бұрын
Все понятно, кроме одного, где на практике нужно использовать ссылки? В каких случаях?
@ivan_naitoraito18 күн бұрын
там, где не нужны указатели 😀
@w0njet Жыл бұрын
22:10 у меня код в точь точь как у тебя но минимальный елемент 5 хотя там тоже есть -2. Помоги
@baldeg_ Жыл бұрын
просто он гавнокодер и написал полную залупу, массив всегда передается как указатель , поэтому толку от int *arr нету, если говорить про ссылку на переменную, то это вообще пиздец, так никто не делает, из-за этого только путаница будет в коде
@AmarokSKB2 ай бұрын
@@baldeg_ он с переменной сделал как пример для пояснения, на деле никто ж не будет на переменную указывать
@vadimgreen37386 ай бұрын
можно вопрос? я в принципе понял, как работает последний пример. Но в функции в параметрах записано int * arr - получается тип данных - это указатель на int. А сам массив у нас не задан указателем, то есть выделением памяти - он задан просто, без указателя - int arr[]. Почему так? а не изначально int * arr = new int(len) и потом в функции полноправно использовать созданный указатель. Возможно я чего-то не знаю, или не понял. Но уже полгода программировал в универе и вроде бы так было правильно
@woomy_squid6 ай бұрын
Зачем нужны ссылки, если есть указатели?
@kookaburru2 жыл бұрын
minval(int arr[]) и (int *arr) одно и тоже. Массив всегда передается как указатель.
@SolarSystem_sUser7 ай бұрын
тоже на этом моменте не понял автора. в каком месте массив начинает занимать место дважды... по идее адрес у него один всегда.
@redoboly5 ай бұрын
а можно также с векторами делать надеюсь?
@AndriiTurchynRieltorDnipro Жыл бұрын
дякую
@Vanek3056 ай бұрын
А как вывести двумерный массив с помощью указателей?и трёхмерный
@SpeedCuber______4 ай бұрын
А ты попробуй сам до этого дойти, ты программист)))0)
@deniszaltsberg2127 Жыл бұрын
а зачем нужны вообще ссылки? ну типо у меня есть значение в одной переменной с названием X, и все что дают ссылки это менять значение X меняя Y.
@ГусевАлександр-у1л Жыл бұрын
Согласен, по сути только для того чтобы не занимать лишнюю память, но в тоже время если я допустим захочу изменять значение которое в себя принимает переменная, отдельно от ссылки. То изменяться будут оба значения и ссылки что в принципе логично и переменной. Тоже самое и с переменной. Сам особо не пойму где можно использовать. Другое дело указатели, реально полезная штука если разобраться.
@jcdfce2707 Жыл бұрын
@@ГусевАлександр-у1л один из вариантов применения - для создания псевдонима переменной. Например, вы дорабатываете чужой код, вам надо доработать код, функцию или метод, а предыдущий программист не сильно заморачивался с именами переменных и вместо rentpay (это просто пример, Оплата ренты) написал имя переменной одной буквой r, соответственно листать весь код и менять везде имя переменной вы не будете, вы просто создаете ссылку на переменную r и работаете с удобным и читаемым именем переменной.
@RadaCasian-ep8ht Жыл бұрын
Как можно пройти курс c++ у вас ?
@AmarokSKB2 ай бұрын
на их сайте за дэнбги
@horhegarsia4221 Жыл бұрын
Вот 5:11 у Вас же восьмибайтовый адрес переменной ))
@novichok34176 ай бұрын
8 байт это 8 бит 8 раз получается 64 символа . Там 64 символа?
@kpanat Жыл бұрын
В ссылке на переменную нет смысла если мы не используем полиморфизм. Потому что мы получаем фактически другое имя для неё. Это бесполезное действо. Более того вносит путаницу в код. Поэтому так никто не делает.
@ФруЛоАй бұрын
Не понял зачем нужна переменная len ? Почему нельзя указать что i < 5 ? И почему показывает ошибку
@xLisiq17 күн бұрын
Конкретно тут не нужна, но в целом полезная штука, как задел на будущее, особенно если нужно будет постоянно дёргать эту функцию и переменную в автоматическом режиме. Не уверен как в C++ это сделать, но в C# можно было бы записать как int len = array.Length и получить обновляемую при каждом вызове функции переменную, которая переходила бы в void minimal автоматически. Как пример из практики - что-то подобное я делал из List'ов когда писал плагин для одной игры, который получал SteamID64 игроков и сортировал их по количеству убийств/смертей с записью в JSON файл.
@SolarSystem_sUser7 ай бұрын
не понятно почему созданный массив передается в функцию и там занимает еще раз место. у него меняется адрес? он дублируется? что происходит при передаче массива в функцию, что он занимает еще раз место в памяти... этот момент не раскрыт. имхо.
@ЭКОНОМкласс-б4ъ Жыл бұрын
что такое "len"? подскажите пожалуйста в каком уроке его проходили? (16:30)
@ДианаКривнюк-п9н Жыл бұрын
len - это название, которое означает количество элементов в массиве. На его месте можно было бы написать любое другое название))
@ЭКОНОМкласс-б4ъ Жыл бұрын
@@ДианаКривнюк-п9н благодарю
@ЭКОНОМкласс-б4ъ Жыл бұрын
ааа понял! во я туп туп)
@martinslepynin79599 ай бұрын
всем привет ответьте на вопрос почему if (min>*(arr+i)); происходит смещение указателя а не сложение элемента массива с i
@5классвиленкин-ъ4п9 ай бұрын
Потому что никакого элемента массива нет
@novichok34176 ай бұрын
Потому что arr это адрес первой ячейки массива элемент массива и меет длину 4 байт. Через 4 байт начинается второй элемент массива и переменная i это 4 байта тоесть каждый раз адрес увеличивается на 4 байта (для int, для других типов другая)
@defolt7 Жыл бұрын
не понял, а почему у меня пишутся разные адреса одной и той же ячейки, то есть не как у вас
@Непрофессионалымы Жыл бұрын
народ почемк я добавил отрицательные числа в массив, но метод минимум выводит лишь минимальное положительное число?
@doctor_livsi_pod_phonk Жыл бұрын
Возможно у тебя unsigned int, что значит беззнаковый int, но тогда бы ты не смог инициализировать переменную отрицательным значением, поэтому ответа на твой вопрос нету)) если ты сделал также как в видео разумеется
@Непрофессионалымы Жыл бұрын
@@doctor_livsi_pod_phonk я уже нашел косяк) не помню где был. но спасибо
@blackdragon74056 ай бұрын
@@doctor_livsi_pod_phonkкстати нет если unsigned int передать минусовой Int то он выведет по модулю значения от максимального int вроде: unsigned int num = -1; std::cout
@woomy_squid6 ай бұрын
Не понял, почему ptrval вывел 20 после обнуления
@Gllory5 ай бұрын
Обнулился Только с *, а переменная осталась
@solomr20132 жыл бұрын
Гоша, чтобы ты порекомендовал Линукс или виндовс для программирования если выбирать что то одно?
@zomsofficial2 жыл бұрын
Для программирования FREEBSD там нечему ломаться и нагружать пк
@linuxoidovich Жыл бұрын
Каждому удобнее разное, но в линуксе есть удобные пакетные менеджеры, возможность быть на musl, а не glibc, там хорошо работают тайлинговые wm, которые ускоряют разработку и повышают удоство.
@raldbthar Жыл бұрын
Зачем вводить людей в заблуждение, ссылки ничего не хранят, а вот как раз указатели могут хранить адрес. Ссылка это ещё одно название для переменной или alias
@Morena-ok8fg Жыл бұрын
если бы на ваш коммент, я бы так и не поняла ничего. Благодарюююю)))
@Lol_12246 Жыл бұрын
Вы случайно не знаете видео или статью где подробнее объясняют эту тему. А то как то хреново объяснил тему. "Просто запомните", даже не объяснил как толком это работает.
@ivan_naitoraito18 күн бұрын
привет, вы год назад писали тут, это всё ещё актуально? или все же автор прав? Просто судя по выводу на экране ссылка все же хранила адрес переменной на которую ссылалась. ChatGPT подскзаал следующее: "Компилятор скрывает детали работы ссылки, но, по сути, ссылка внутри реализована как указатель на объект. Она оперирует адресом объекта, но сама по себе не дает прямого доступа к этому адресу."
@raldbthar18 күн бұрын
@@ivan_naitoraito Привет, конечно актуально. В независимости от того как ссылка реализована компилятором, мы, как разработчики, должны использовать ссылку как эту переменную, это просто псевдоним, ещё одно название для переменной, и больше ничего
@МишаМасленченко8 ай бұрын
А C++ плохо не станет если я напишу int e = 1 int &a = e + 1 ?
@novichok34176 ай бұрын
Я думаю нет . Выполнение начнётся с права налево : переменная e увеличится на единицу и адрес переменной e запишится в переменную a
@Nero228344 ай бұрын
Так и не понял в чем разница между ссылками и указателями
@ЮраНиколаев-ц2в Жыл бұрын
А нельзя было поставить ссылку на весь массив ?
@novichok34176 ай бұрын
Адрес перввог элемента и есть ссылка на весь массив
@vasyanpro8848 Жыл бұрын
как добавились эти указатели все перепуталось, и простейшие программы теперь вообще не понятны(
@maywx2 жыл бұрын
можно ли делать игры с движком unity на c++?
@aram2010uk2 жыл бұрын
Нет unity только с c#, c++ можно использовать в unreal engine
@maywx2 жыл бұрын
@@aram2010uk спасибо
@El_Cuero2 жыл бұрын
Здравствуйте, скажите пожалуйста, почему Ваш сайт не открывается?
@Arh-s2q8 ай бұрын
Я его взломал
@bahromjonabdusamatov85012 жыл бұрын
Круто
@Александр-к8б9ж2 жыл бұрын
Подскажи пожалуйста какой фреймворк выбрать для написания скринера на python для торговли на крипте?
@linuxoidovich Жыл бұрын
С нуля писать можно.
@horhegarsia4221 Жыл бұрын
Если подумать. Разрядность процессора - 64, значит, в теории, размер оперативной памяти может быть очень большим (тип long, т.к. 8 * 8 = 64). Получается, чтобы хранить адрес ячейки памяти необходимо 8 байт. Верно? Теперь по поводу ссылок: гораздо нагляднее был бы пример с пользовательсим вводом внутри пользовательской функции, которая принимает параметр-ссылку и ни чего не возвращая, меняет значение по ссылке.
@defolt7 Жыл бұрын
все понял лишний амперсант написал
@RodjerX2 жыл бұрын
Я думал, что запись *(val + i ) , где val имеет тип int сместится на адрес слеующей ячейки памяти. А так как int это 4ре байта, то на вторую ячейку из четырёх. А для смещения на следующий элемент массива придётся делать *( val + i * sizeof( int ) ). Теперь сижу и думаю в чём я не прав.
@raldbthar Жыл бұрын
Указатель типа int сам знает на сколько байт ему смещаться при арифметике указателей, компилятор распознает и интерпретирует например *(val + 2) как "добавить к адресу val 2*(sizeof(int)), и считать значение int по полученному адресу с помощью операции разыменования '*'
@RodjerX Жыл бұрын
@@raldbthar логика понятна, спасибо. 🤝🏼
@horhegarsia4221 Жыл бұрын
Про указатели и ссылки вообще не понятное объяснение.
@parabox3176 Жыл бұрын
Полностью скопировал код из видео, код не работает. Ни черта не понимаю. Программирование это весело.
@amerigovespucci1499 Жыл бұрын
chatGPT в помощь
@w0njet Жыл бұрын
У меня тоже. Исправил ошибку? Если да, помоги пожалуйста.
@parabox3176 Жыл бұрын
@@w0njet Неа. Я забил на неё.
@w0njet Жыл бұрын
@@parabox3176я нашел ошибку (chatgpt точнее) ты скорее ошибся когда писал код в функции, по крайней мере я там ошибся. Я написал (*arr + i) а надо было *(arr + i), сорян если я не понятно объяснил
@hxntaininja Жыл бұрын
Нихуя не понятно
@maasimada11 ай бұрын
согласен
@w0njet Жыл бұрын
22:10 у меня код в точь точь как у тебя но минимальный елемент 5 хотя там тоже есть -2. Помоги