#31. Указатели на массивы | Язык C для начинающих

Поділитися
Вставка
  • Опубліковано 27 гру 2024

КОМЕНТАРІ • 29

  • @trimo1120
    @trimo1120 Рік тому +9

    Познавательно! Последняя фраза очень поразила меня и заставила задуматься, вот я, иногда, вместо 3 пишу 0b11, на деле это бессмысленно, ведь код становится нечитабельным и тут я показываю не свои познания в области информатики, а свою небрежность к коду, в итоге программа скомпилирует, почти одинаковый код. Кстати, спасибо за превосходный видеоурок!

  • @АнДа-х5ъ
    @АнДа-х5ъ 10 місяців тому +4

    Учитель от Бога!

  • @anvarx1
    @anvarx1 Рік тому +5

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

  • @blackcatdevel0per
    @blackcatdevel0per 3 дні тому +1

    Классный урок!
    хоть это показано, но я бы ещё добавил чуть более явное объяснение о логике поиска элемента массива (то что происходит при использовании среза и передачи ему индекса - 8:38) по формуле: +(*)

  • @andredru4278
    @andredru4278 11 місяців тому +2

    Спасибо. Я немного шокирован ) Мощь!

  • @SMV1972
    @SMV1972 9 місяців тому +1

    Огромное Спасибо! Я вообще ноль, и то все понятно. Очень хорошо объясняете

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

    Отлично! Поскольку берется данные из ячейки, адрес которой есть просто сумма начального адреса (пусть, ptr_ar=106) и смещения (в данном случае=2), то получается, что мы берем данные из ячейки 106+2=108. И неважно, как мы это вычислили: 106+2 или 2+106.
    Спасибо Вам за ваши уроки!

  • @jamjam3337
    @jamjam3337 Рік тому +2

    спасибо!👏👍💪

  • @planetskaro3782
    @planetskaro3782 Рік тому +4

    Сергей, здравствуйте. Почему len_2 равна 4? Шорт ведь двухбайтовые, для len_1 сходится 2*7=14, а вот со второй?

    • @selfedu_rus
      @selfedu_rus  Рік тому +7

      short *ptr_ar;
      определяет указатель, который работает с данными типа short; здесь тип short относится не к указателю, размер указателей всегда соответствуют разрядности программы. Если она 32-х разрядная, то указатели занимают 4 байта. Именно это и отражено в ролике.

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

    sizeof(ptr_arg) - возвращает размер переменной ptr_arg, которая является указателем. На 64-битной системе любой указатель (независимо от того, на что он указывает) имеет размер 8 байт. Поэтому len2 должно по идеи быть равно 8.

    • @АлександрЧерданцев-у7н
      @АлександрЧерданцев-у7н 28 днів тому

      Моё почтение, сударь! Откуда у вас такие "глубокие" знания о размере указателя на 64-битных системах? Я новичок в программирование, но из предыдущих видео уважаемого автора этого канала понял, что размер указателя определяется при его объявлении типом данных, с которыми он будет работать, т.е. на которые он будет указывать. Поэтому я думал, что len2 должен был быть 2, т.к. short *ptr_ar; Следовательно, либо на 64-битной системе тип short занимает в оперативной памяти 4 байта, либо тут что-то наделал тип size_t при объявлении переменной len2? Странно, что сам автор на это никак не обратил внимание и не пояснил данный момент.

  • @Вайс-я8з
    @Вайс-я8з 4 місяці тому +2

    Я не встретил в видео упоминания (поправьте меня, если это не так) о том, что для всех указателей адрес увеличивается или уменьшается на величину, равную размеру объекта того типа, на который они указывают. Просто изначально я не понял, что за условная единица (или несколько оных) добавляется к указателю на массив ar (т.е. что она из себя представляет, 1 байт или 2, или больше?). Оставлю комментарий для таких же как я.

    • @selfedu_rus
      @selfedu_rus  4 місяці тому

      об этом дальше в адресной арифметике

    • @АлександрЧерданцев-у7н
      @АлександрЧерданцев-у7н 28 днів тому +1

      @@selfedu_rus может раньше? Адрес Арифметика, вроде, уже как была? Но из неё я почему-то не понял, что размер самой ячейки памяти (или регистра), в которой хранится сам указатель всегда одинаковый и зависит от разрядности ОС, под которую пишется программа. Поправьте меня, если я не прав.

  • @powerri1992
    @powerri1992 7 місяців тому +3

    Здравствуйте, можете пожалуйста, более подробно рассказать почему len_2 равна 4, я видел комментарий с таким же вопросом но там не очень понял ответ, так как знаю что Шорт размером в 2байта а значит и указатель на Шорт тоже 2 байта, спасибо!

    • @powerri1992
      @powerri1992 7 місяців тому

      Или это именно размер вместимости самого места куда помещается адрес?

    • @СамуилИгоревич
      @СамуилИгоревич 5 місяців тому +1

      ​​​@@powerri1992Да, 4 байта в данном случае(32 битная архитектура) - размер области памяти, которая отводится под указатель. На 64 битной - соответственно 8 байт отводится под хранение адреса. Попробуй написать printf("%zu", sizeof(short*)); printf("%zu", sizeof(short)); и сравни. Для удобства можно считать типами short*, double*, void* и т. д. Размер выделенной под указатель памяти не зависит от того, на какой тип он ссылается, а только от разрядности компилятора и ОС.

    • @СамуилИгоревич
      @СамуилИгоревич 5 місяців тому +1

      По поводу того, можно ли считать short* типом, есть мнение, что нельзя, так как short* a, b; a - указатель, b - обычная переменная(а мы предлагаем, что указатель). Для этого лучше объявлять указатели и обычные переменные на разных строчках, чтобы избежать путаницы.

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

      @@СамуилИгоревич спасибо

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

      @@СамуилИгоревич спасибо

  • @РусланКарнеенко
    @РусланКарнеенко 11 місяців тому +1

    Спасибо

  • @donfedor007
    @donfedor007 Рік тому +1

    Спасибо вам! ar[idx] получается это своего рода синтаксический сахар)

  • @smolewood
    @smolewood Рік тому +1

    Скажите, а почему конструкт short x = *prt_ar; не срабатывает как только добавляешь индексы в квадратных скобках, например при таком операторе short x = *prt_ar[2]; - компилятор уже выдает ошибку, как только добавляешь индексы в квадратных скобках звездочка уже на нужна?

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

      Потому что ptr_ar[2] эквивалент записи *(ptr_arr+2) и мы не может ещё раз записать звёздочку, так как это уже тип int

  • @НиколайШуман-ч9ю

    Ребята, подскажите пожалуйста !
    Как получить доступ к скрытому контенту )

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

    укзатели это просто указатели , а не указатели на массивы