Адреса и указатели в Си. Адресная арифметика

Поділитися
Вставка
  • Опубліковано 12 січ 2025

КОМЕНТАРІ • 237

  • @БываетИтак-г1щ
    @БываетИтак-г1щ 4 роки тому +109

    я НИКОГДА, НИ-КО-ГДА не писал комментариев к видео, но тут, решил освежить некоторые вещи в памяти, как же жаль, что мне сразу так не объясняли, суть даже не в том, что я открыл для себя что-то новое, а просто с сожалением вспомнил процесс того, как я пару лет назад понимал это и как мне это объясняли. Приятно смотреть. Супер!

    • @nikolayshishkin6293
      @nikolayshishkin6293 Рік тому +3

      И нашёл отличную видео-лекцию, когда в ней уже нет нужды😆

  • @Sentinel-1
    @Sentinel-1 5 років тому +160

    Лучшее объяснение, что я видел. Всё по существу и без лишнего словоблудия.

    • @КекЛол-й3ы
      @КекЛол-й3ы Рік тому +1

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

  • @sergepisarsky2038
    @sergepisarsky2038 2 роки тому +17

    Оказывается можно абстрактные вещи, которыми изобилует программирование, объяснять на понятном языке. Но такой стиль, к сожалению, встретишь не часто, совсем не часто. Я после первых лекций в универе по основам программирования испытал настоящий стресс, а от этой лекции - положительные эмоции, т.к. изложенный материал не оставил пробелов в понимании. Запомнить понятный материал куда как легче, чем материал с белыми пятнами в понимании. Респект профи

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

      Это и есть профессиональный преподаватель.

  • @ЛеопольдКотов-к3щ
    @ЛеопольдКотов-к3щ 6 років тому +301

    Топовый препод

  • @alexandrponomarenko4127
    @alexandrponomarenko4127 3 роки тому +3

    23:32 - эта САМОЕ важное и простое объяснение, почему первый элемент всегда имеет индекс 0! Никто никогда мне не мог этого нормально объяснить, а тут... просто браво!!!

  • @КотТоля-ж1ч
    @КотТоля-ж1ч 6 років тому +50

    Эх вот бы все преподы умели так доходчиво и интересно, с юмором объяснять....)

  • @andreieliseev1516
    @andreieliseev1516 4 роки тому +10

    Тимофей Хирьянов, спасибо вам за видеоуроки, не каждому дано так доходчиво рассказывать!

  • @kotnesobaka3080
    @kotnesobaka3080 5 років тому +50

    Жалко нельзя поставить много лайков, Спасибо Тимофей за внятное и понятное объяснение!

  • @evgenykonovalov4870
    @evgenykonovalov4870 5 років тому +5

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

  • @fontes5697
    @fontes5697 2 роки тому +9

    Как же это прекрасно, самое толковое объяснение темы из тех что видел, СПАСИБО ВАМ ОГРОМНОЕ!

  • @yuriilipaiev7811
    @yuriilipaiev7811 4 роки тому +4

    Преподаватель вселенского масштаба)) Сложные вещи простым языком. Очень рад что нашел этот канал. Тимофей, спасибо Вам за труд!

  • @blackmass4925
    @blackmass4925 4 роки тому +10

    Вот это я понимаю: дистанционное образование. Преподавателю поклон.

  • @youtubeuser4684
    @youtubeuser4684 4 роки тому +8

    Офигеть препод! Талант! Никакие курсы не нужны и универы

  • @imlaladede1290
    @imlaladede1290 2 роки тому +1

    Вы лучший преподаватель!!!!!!!! Спасибо огромное за такое прекрасное объяснение!!!!!!!!!!!!!

  • @reddalailama4594
    @reddalailama4594 4 роки тому +4

    Офигеть как всё подробно и наглядно... Я в шоке. Автор прекрасный учитель. Желаю как можно больше подписчиков

  • @juvusart
    @juvusart 5 років тому +18

    Спасибо! Очень круто объяснили одну из самых сложных тем в си!

  • @art8fact188
    @art8fact188 5 років тому +33

    Спасибо Вам огромное, Тимофей! Только вы корректно объяснили суть положения звёздочки. Все остальные ставят как попало без объяснения и ломают всю логику. После этого видео перемещаю Вас на моё 1е место в рейтинге преподавателей программирования )))

    • @TheCxnine
      @TheCxnine 5 років тому

      Звездочку ставят к переменной, а не к типу, потому что кокда указатель передается в определении функции fn( int *p )он там уже пишется без типа { *p = 10; }

    • @denisd7743
      @denisd7743 4 роки тому

      @@TheCxnine так вроде мужик сказал что похер где ставить звездочку если звездочка указывает на адресный тип

    • @ufi_ded
      @ufi_ded 4 роки тому

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

  • @ИгорьПанькин-ъ7л
    @ИгорьПанькин-ъ7л 3 роки тому +1

    Лучшее объяснение, Ваш канал просто находка , спасибо!!!

  • @oleholeynikov8659
    @oleholeynikov8659 4 роки тому

    ну просто хочется обнять таких людей, преподаватель с талантом)) очень емко, понятно и на простых примерах

  • @McGewen
    @McGewen 4 роки тому +3

    даже просмотревь половину видео все очень прояснилось, вот это дядька, уважуха тебе! посмотрев до окнца - протсо апплодирую стоя!

  • @bookuha
    @bookuha 3 роки тому +1

    Вы лучший! Сижу тут, нервно хихикаю, от того, что наконец-то осознал

  • @linkjeinson770
    @linkjeinson770 5 років тому +14

    Спасибо! Вы лучший препод в мире!)

  • @Антон-з6у
    @Антон-з6у 5 років тому

    Только внимательный зритель сможет увидеть под рубашкой застегнутой под последнюю пуговицу и повышенной тональностью голоса(что дает ложное представление "типичного программиста"), хорошую осанку и четко поставленную дикцию. Спасибо Вам за этот урок, многие вещи прояснились!

    • @Video-zo5oe
      @Video-zo5oe 5 років тому

      Что значит "типичный программист"? Что все к нам прикопались, зависть берет, шаблоны ваши рвем? Завидно, да, ненавидели нас пока бухали и смотрели телевизор вместо учебы, а теперь зло берет, что нам служить приходится? Как насчёт типичного экономиста что работает таксистом, как насчёт типичного юриста что работает охранником?

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

    Лучший преподаватель, главное с харизмой!!!!

  • @user-marrusia22
    @user-marrusia22 4 роки тому +6

    Как хорошо, что нашла ваш канал! Спасибо большое за видео, очень понятно:)

  • @aef1hfqdcxaqwxxqsxqgvbnr797
    @aef1hfqdcxaqwxxqsxqgvbnr797 3 роки тому

    как раз из-за указателей вылетел в свое время из универа. Си++ был на первом курсе а асм уже на втором. Спасибо за понятно изложенный материал!

  • @7gennews
    @7gennews 2 роки тому

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

  • @Mani_Fast
    @Mani_Fast 2 роки тому +3

    Каждая секунда бесценна, спасибо вам

  • @psg5_prog
    @psg5_prog 4 роки тому +2

    Спасибо вам батюшка за прекрасную лекцию про указатели.

  • @UFO26
    @UFO26 5 років тому +2

    «Любимая, я тебя поведу к самому краю Вселенной!
    Я подарю тебе эту звезду, светом нетленным будет
    она озарять нам путь в бесконечность…»*

  • @744c
    @744c 4 місяці тому

    Вау, ни в одном из учебников так доходчиво не объясняют

  • @Дмитрий-й1и7л
    @Дмитрий-й1и7л 4 роки тому +2

    огромное спасибо за видео. Было много непонятного до вашего объяснения.

  • @AspireM3400
    @AspireM3400 5 років тому

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

  • @SunSay
    @SunSay 3 роки тому +3

    В Адресном языке программирования (1955г.) можно было ставить n звёздочек перед указателем и это имело очень большой смысл ("штрих-операция"). "Штрих-операция" (разыменование указателя) была апаратно реализована на ЭВМ "Киев" в 1955г.

  • @ufi_ded
    @ufi_ded 4 роки тому +1

    Шутку про пять звёздочек заценили)
    Спасибо за понятное объяснение!

  • @mov_r16_r17
    @mov_r16_r17 5 років тому +1

    Хорошее объяснение. Понравилось, что Тимофей подчеркнул, что * в объявлении - это не операция разыменования (мне больше нравится термин "ссылка по указателю"), а модификатор типа. Поэтому я предпочитаю объявления типа int* ip, вместо int *ip.

  • @ГеоргийОрлов-г5в
    @ГеоргийОрлов-г5в 4 роки тому +14

    То неловкое чувство, когда тебе 40, а ты смотришь курс для школьников.
    Эх, в наше время таких преподов не было...

    • @tishafeed8085
      @tishafeed8085 4 роки тому +6

      никогда не поздно учиться

  • @Blendershick
    @Blendershick 5 років тому +4

    Спасибо огромное! Лучшее объяснение)

  • @ammonjerro396
    @ammonjerro396 2 роки тому +2

    Хорошее объяснение. Я даже понял как работает. Вопрос - а зачем нужны все эти ссылки и указатели и почему напрямую не обратиться к переменной?

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

    Отличный урок, объяснил доступно👍

  • @IgorAlov
    @IgorAlov Рік тому

    На самом деле, все очень круто, но указатель, правильнее будет использовать тип void *, потому что размер ячейки под адрес в памяти будет равен, по сути разрядности процессора. Int * частный случай, который говорит о том, на какой тип данных представлен по конкретному адресу в памяти. В данном случае у вас int, но там может быть например char или вообще структура.

  • @АлексейКлоков-б1з

    Очень важный урок для меня. Спасибо вам

  • @rmgear6845
    @rmgear6845 4 роки тому

    Уважаю за доходчивость объяснения

  • @Mitaleko
    @Mitaleko Рік тому

    Как здорово, очень понятно и по существу

  • @Gena-ku7if
    @Gena-ku7if 5 років тому +1

    Лучшее объяснение, реально....

  • @ViktorRy2
    @ViktorRy2 2 роки тому

    На 21:10 в выражении A[i] = *(A + i) какого типа должна быть переменная i? Если она типа char/short/int, то в правой части выражения перед сложением будет осуществлено её приведение до типа int*?

  • @robertnewman8824
    @robertnewman8824 11 місяців тому

    Браво ! Лучшее объяснение !

  • @catastrophic3709
    @catastrophic3709 Рік тому

    Тимофей, Вы просто лучший!

  • @jimshtepa5423
    @jimshtepa5423 2 роки тому

    в 20:20 производится разыменование А, получается разыменование можно выполнить не только указателя, но и массива или переменных любого типа, даже примитвов?

  • @ГеоргийОрлов-г5в
    @ГеоргийОрлов-г5в 4 роки тому

    Я бы посоветовал Тимофею попреподавать ассемблер на микроконтроллерах AVR. Они очень простые в изучении, там все эти адреса можно прописывать вручную и очень хорошо разобраться.

  • @archiechellaut9483
    @archiechellaut9483 3 роки тому

    Большое спасибо вам за полезное видео, Тимофей!

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

    Тимофей !!!Спасибо Вам большое

  • @cat_amanita
    @cat_amanita 4 роки тому +2

    Я в восторге от этого видоса :)

  • @deitven9631
    @deitven9631 2 роки тому

    Огромное спасибо за качественный контент!

  • @АлексейЭмильевич
    @АлексейЭмильевич 5 років тому +3

    Блистательно объясняет!

  • @cat_amanita
    @cat_amanita 4 роки тому +2

    Указатели это моя самая любимая тема в Сишнике. И пожалуй это самая важная тема в этом языке. На указателях можно даже ООП изобразить. К примеру виртуальные функции из С++ можно сделать на Си с помощью указателей на функции. Я вообще недолюбливаю С++ и обожаю Си. Ибо указателей мне достаточно чтобы решить любую задачу.
    Многие сложные задачи можно решать введением дополнительного уровня косвенности. Так вот указатели какраз и позволяют мне вводить дополнительный уровень косвенности. Указатель на указатель на указатель.
    На Сишнике можно писать в ООП стиле именно благодаря указателям. Правда я почти никогда не использую ООП, т.к. считаю его вредным. Поэтому и не люблю С++ и Java.
    Я знаю 10 языков и мне часто так нехватает нормальных указателей из Си.
    Я бросил NodeJS, надоел он мне. Вернулся к любимому Си. 8 лет на JS писал и вдруг резко бросил

  • @beehummingbird4744
    @beehummingbird4744 2 роки тому

    Запихал его туда . топовый преподаватель . 😁😁😁 .

  • @DodgerEcho
    @DodgerEcho 2 роки тому +1

    У меня один вопрос, зачем это надо, там где две звёздочки, три, ведь можно сделать простым способом например через присвоение переменной i другого значения, ну или хотя бы через *pi = ... Зачем остальные сложности?

  • @maxframe4415
    @maxframe4415 4 роки тому

    Мои глаза открылись... 😮. Спасибо!

  • @МихаСёмин-п1т
    @МихаСёмин-п1т 5 років тому +1

    Спасибо большое за уроки, объясняете всё очень доходчиво.
    Только не совсем понятен смысл употребление указателей.
    В данном примере, можно было без и указателя присвоить переменной значение

  • @ЕвгенийЯ-щ6ъ
    @ЕвгенийЯ-щ6ъ 3 роки тому +1

    Ого, круто, можно делать переменные с адресами переменных который сами лежат на каком то адресе и его тоже можно записать в переменную.
    А можно вопрос? Зачем это надо и где используется.
    Чувствуешь себя как на уроке, когда час объясняли что-то сложное, а зачем оно нужно так и не сказали

  • @Магаоев-ш5з
    @Магаоев-ш5з 3 роки тому

    Шикарно. Блестящее объяснение

  • @Video-zo5oe
    @Video-zo5oe 5 років тому +14

    Переменная что хранит адрес переменной которая сама хранится по какому-то адресу

    • @rattingmage9475
      @rattingmage9475 4 роки тому +2

      Переменная равносильна адресу, указывающему на ячейку в памяти.

  • @VasilyMT
    @VasilyMT 3 роки тому

    Отличное лаконичное объяснение.

  • @Minas__Morgul
    @Minas__Morgul 4 роки тому

    Спасибо вам за ваши уроки!!!

  • @DeadnWoon
    @DeadnWoon 5 місяців тому

    Можно ли обойтись без указателей, как явления - вот в чём вопрос?.. Нет, с адресами в памяти работать придётся - но нужны ли для этого специальные сущности или это просто синтаксический сахар? Если мы знаем размер адреса (который, видимо, традиционно равен размеру машинного слова), то просто берём целое (знаковое или беззнаковое, как нам удобнее) и храним в нём адрес. Отмечаем в блокнотике или где ещё размер того, адреса чего мы собираемся хранить - и всё! Если в языке существует некий оператор или функция, позволяющий найти ближайшее подходящее место в куче, ищем то место. Если в языке есть оператор или функция, позволяющие разместить переменную по конкретному адресу, используем его! В итоге исчезает вся проблема контекстной зависимости всей этой символики с её звёздочками и амперсандами. Просто работаем с адресами, как с целыми беззнаковыми числами.

  • @SecretSecret-c7o
    @SecretSecret-c7o 3 роки тому

    Лучший, спасибо за лекцию

  • @pattypr0
    @pattypr0 5 місяців тому

    Я 10 лет не мог понять, что делают эти сраные указатели и как с ними работать. Но теперь как понял!

  • @БогданБородулин-э9р

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

  • @epheymind8475
    @epheymind8475 2 роки тому

    Благодарю! отличное объяснение

  • @ilyuhagg8546
    @ilyuhagg8546 Рік тому

    Либо я - дэбил, либо шото препод прогоняет. 3:30 говорит, что int* - это тип данных и пишется слитно(далее он пишет pi), а на 12:35 начинает кодить вообще по-другому, присваивая звёздочку имени переменной. Поясните, если не в тягость

  • @Vovchirshtain
    @Vovchirshtain 2 роки тому

    Просто лучший 👍💯

  • @ИсламГашимов-э3н
    @ИсламГашимов-э3н 4 роки тому

    Вообще мощно . Адреса это бомба

  • @alexswipe4590
    @alexswipe4590 5 років тому +1

    Здравствуйте, Тимофей! Подскажите пожалуйста по поводу указателей и строковых литералов.
    Почему при выполнении следующей программы:
    int main(int argc, char** argv) {
    char str[30] = "Hello";
    char *p;

    p = str;

    cout

    • @petrpetr9576
      @petrpetr9576 4 роки тому +1

      Потому что так работает cout. Когда ему передается указатель на char то он печатает строку. Что бы увидеть адрес - пиши cout

  • @wizard_still
    @wizard_still 4 роки тому

    действительно понятно, еще бы про флаги такое найти

  • @hiler844
    @hiler844 4 роки тому

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

  • @Nikita_Pro89
    @Nikita_Pro89 2 роки тому

    Смотрел год назад, вообще ничего не понял. Посмотрел сегодня - понял всё))

  • @ukrainianeye2545
    @ukrainianeye2545 4 роки тому

    Супер! ОГРОМНОЕ СПАСИБО!

  • @proletarian
    @proletarian 5 років тому

    Указатели это гениальнейшая штука

  • @nimgvae
    @nimgvae 4 роки тому

    Шикарная подача.

  • @KrassRome
    @KrassRome 2 роки тому

    да - Вот дом, который построил Джек... Но все равно классно и доходчиво.

  • @Divon89
    @Divon89 6 років тому

    Отлично и внятно рассказал!

  • @smirnov-49
    @smirnov-49 2 роки тому

    15:30 Чем больше звёздочек, тем дороже.

  • @Ma_X64
    @Ma_X64 4 роки тому

    Прикольно было бы разложить по элементам массива их собственные адреса.

  • @cat_amanita
    @cat_amanita 4 роки тому

    В языке Nim мне очень нехватает арифметики указателей, поэтому решил использовать Nim и Си вместе. На 90% программу напишу на Си и 10% на Nim. Эти языки идеально сочетаются, потомучто Nim транспайлится в Си и только потом компилируется. Полгода уже юзаю Nim и я им очень сильно доволен. Но мне там нехватает единственной вещи, нормальных блин указателей. Они там есть, но ими пользоваться нифига неудобно, поэтому решил переписать весь свой код на Си. Ну не весь конечно, ибо высокоуровневый код лучше оставить на языке Nim, а низкоуровневые функции переписать на Си. Т.е. переписать те участи которые требуют максимальной скорости, те участки где так и просятся указатели. Ибо я люблю арифметику указателей, хоть она и опасна. Зато позволяет достичь очень высокой скорости

  • @fen-siz
    @fen-siz 3 роки тому

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

  • @christferna
    @christferna 2 роки тому

    Спасибо за лекцию!

  • @Alexcei64rus
    @Alexcei64rus 5 років тому +58

    Кто из 21?

    • @dmarsell
      @dmarsell 5 років тому +3

      )))

    • @segameserver
      @segameserver 5 років тому +1

      Согласен, тема тяжелая.))

    • @blackmass4925
      @blackmass4925 4 роки тому +1

      Alexcei64rus Из 2021-го года?

    • @Alexcei64rus
      @Alexcei64rus 4 роки тому +1

      @@blackmass4925 школы 21

    • @user-dh4zm7tq1y
      @user-dh4zm7tq1y 4 роки тому

      ну мне 21, так что я тоже в каком-то смысле из 21

  • @АртёмМингазов-е8з
    @АртёмМингазов-е8з 4 роки тому

    Огромное спасибо за видео

  • @namename2031
    @namename2031 3 роки тому

    Одно не понимаю. Если мы заносим адрес в переменную, то почему на выходе получаем значение этой переменной на экране, а не её адрес? Я думал адрес переменной это что то с большим количеством букв и цифр.

  • @vitalic853
    @vitalic853 2 роки тому

    Однозначно лайк, спасибо

  • @sergeypyatkovskiy1808
    @sergeypyatkovskiy1808 6 років тому +3

    Отличное видео

  • @DimaIlyin1
    @DimaIlyin1 2 роки тому +1

    Это Борис Трушин только в информатике лол)))

  • @phat80
    @phat80 6 років тому +6

    Кто-нибудь может объяснить, зачем на практике применяется указатель на указатель? Никак не могу понять смысла. Вот указатель на указатель на указатель (int***) нигде не встречал, а что-то типа (int**) вижу достаточно часто. Но не понимаю, почему не подходит просто указатель.
    Вообще не понимаю, почему во всех лекциях не хотят пояснять для чего реально и в каких случаях это необходимо и почему в том или ином случае без этого никак не обойтись.

    • @Chastor97
      @Chastor97 6 років тому +4

      int** используется для работы с двумерным массивом

    • @phat80
      @phat80 6 років тому

      @@Chastor97 Спасибо, но хотелось увидеть какие-то практические примеры. Короткая фраза мало что проясняет. Может дадите ссылку на какое-нибудь видео по теме?

    • @Chastor97
      @Chastor97 6 років тому +1

      @@phat80 извините, но у меня нет времени. Знаю точно, что время есть у Гугла. Гуглите "С двумерные массивы" и что-то подобное. Погуглите разборы каких-нибудь задач соответствующих

    • @phat80
      @phat80 6 років тому

      @@Chastor97 Да я от вас и не требую объяснений. К сожалению, все, что можно найти в интернете не имеет практической привязки. Одна теория, от которой тошнит уже. Мне иногда кажется, что все эти преподы сами четко не знают именно практику применения того, что объясняют.

    • @Fioletka_YT
      @Fioletka_YT 6 років тому

      В многих случаях например динамические массивы. Двуммерный динамический массив это указатель на указатель

  • @Krotonyasha
    @Krotonyasha 2 роки тому

    Топовое объяснение!

  • @МихаилЛитвинов-с6у

    7:18
    Но кто же сконструирует последнюю матрешку.....

  • @Video-zo5oe
    @Video-zo5oe 5 років тому +1

    Хороший урок спасибо

  • @иди_поешь
    @иди_поешь 4 роки тому

    всё очень понятно, спасибо

  • @Misha4320-c2g
    @Misha4320-c2g 5 років тому

    Посмотел не понял. Почитал коменты. А массивы данных. Пока только из массивов понимаю. На ардуино дисплэй 1602 и рисование своих символов.

    • @alexandersamorodov7217
      @alexandersamorodov7217 5 років тому

      Спасибо вам большое! А кто такой Джон Голт?

  • @hannahr5037
    @hannahr5037 5 років тому +1

    Тимофей,
    Спасибо!