#54. Указатели на структуры. Передача структур в функции | Язык C для начинающих

Поделиться
HTML-код
  • Опубликовано: 8 фев 2025
  • Практический курс по C/C++: stepik.org/cou...
    Телеграм-канал: t.me/java_and_c
    Инфо-сайт: proproprogs.ru...
    Объявление указателей на структуры. Оператор доступа к полям структуры через указатели. Порядок передачи структур в параметры функции.

Комментарии • 40

  • @trimo1120
    @trimo1120 Год назад +1

    Видеоурок как всегда на высшем уровне! Я рад, что Сергей в конце услышал мой внутренний голос и создал тип VECTOR. Ещё хочу немного от себя сказать, чтоб программирование изучать, мы учим математику, константы и радуемся, когда программа вычисляет сама дискриминанты. И спустя несколько лет выводим результат не в консоль, а в ui-окно, благодаря Сергею, нам всё это давно дано!😶

  • @AlexRootx
    @AlexRootx Год назад +3

    Очень познавательно, спасибо, Сергей!!!

  • @andredru4278
    @andredru4278 Год назад +2

    Спасибо. Подача материала если и не иделальна, то очень близка к идеальной.

  • @uchoba
    @uchoba Год назад +1

    ну хоть тут понятно все) Спасибо что помогаете разбираться в ЯП СИ)

  • @MalenkayaPlomba
    @MalenkayaPlomba Год назад +1

    Спасибо тебе большое дружище, очень приятный урок. Было бы классно увидеть от тебя реализацию односвязного и двусвязного списка на Си! Добра тебе :)

  • @anvarx1
    @anvarx1 Год назад +3

    Спасибо за урок !!! Очень познавательно !!!

  • @Lord_Nodus
    @Lord_Nodus Год назад +2

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

  • @MrLeyt1125
    @MrLeyt1125 11 месяцев назад +1

    Классный вектор из одной точки, бро )

  • @alekskapitonov2738
    @alekskapitonov2738 8 месяцев назад +1

    Спасибо.

  • @КузьмаМазуренко
    @КузьмаМазуренко 2 месяца назад +1

    Когда заменил обозначение структуры псевдонимом, программа сработала на 17 тысячных секунды быстрее.

  • @WhiteCap-z1e
    @WhiteCap-z1e Месяц назад +1

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

  • @DGT67
    @DGT67 10 месяцев назад +1

    19:10 верно ли что второй аргумент (непосредственно инициализированный в списке аргументов при вызове) будет скомпилирован и лежать в .text секции ? или там все таки в рантайме в вызове isum_vector будет выделено на стеке для noname аргумента ?

  • @garrygoodrege255
    @garrygoodrege255 Год назад +1

    Добрый день! не планируете сделать курс платный/бесплатный про perl, регулярки, для души так сказать? Отличный курс про C!!!

    • @selfedu_rus
      @selfedu_rus  Год назад

      Спасибо! По perl нет, а регулярки для Python уже есть.

  • @AlexAlex-uj3co
    @AlexAlex-uj3co Год назад +1

    Здравствуйте, интересное и познавательное видео. Можно ли каким-то образом узнать скорость выполнения программы и дать оценку например насколько быстрее выполняется код при передаче структуры в функцию через указатель, а не по значению? И в каких единицах измерения правильнее оценивать скорость выполнения кода (программы)?

    • @selfedu_rus
      @selfedu_rus  Год назад +2

      Скорость программ определяют, либо фактически по времени, либо по объему операций, используя концепцию Big O (О большое). Подробнее о ней в курсе по структурам данных.

  • @МагомедИбрагимов-с8ъ

    Сергей хотел бы узнать будет ли у вас курс по java на степике?

    • @selfedu_rus
      @selfedu_rus  Год назад

      не знаю насколько востребовано, сам курс по Java у меня провалился, не смотрят

    • @МагомедИбрагимов-с8ъ
      @МагомедИбрагимов-с8ъ Год назад

      @@selfedu_rus У меня к вам вопрос как к специалисту какой язык учить для бэкенда?

    • @selfedu_rus
      @selfedu_rus  Год назад

      @@МагомедИбрагимов-с8ъ зависит от компании, смотря что требуют. Если вообще, то PHP, Python, C# часто используются.

  • @merqver5046
    @merqver5046 Год назад +1

    ruclips.net/video/yWmFfpPz2A4/видео.html alt+shift+down - дублировать строку

  • @DGT67
    @DGT67 10 месяцев назад

    17:15 не удобнее ли будет в sum_vector аргуметы передать по ссылке: sum_vector(const struct tag_vector&, const struct tag_vector&) ?

    • @olegkomlev
      @olegkomlev 5 месяцев назад +1

      Ссылки & есть в С++, но нет в Си.

  • @АлександрКаптуров-с8и

    Сергей, после данного курса Вы планируете перезаписать свой ранний курс по с++ или будет другая тема?

    • @selfedu_rus
      @selfedu_rus  Год назад +1

      Базу по С++ не планирую, а ООП, вроде нормально дано. Те уроки по основам С++ удалю после выхода этого курса.

    • @АлександрКаптуров-с8и
      @АлександрКаптуров-с8и Год назад

      @@selfedu_rus Зачем удалять? Разве они плохие? Оставьте их пожалуйста для сообщества!)

    • @selfedu_rus
      @selfedu_rus  Год назад

      @@АлександрКаптуров-с8и убого там все, как то даже неудобно за них ))

    • @АлександрКаптуров-с8и
      @АлександрКаптуров-с8и Год назад +3

      @@selfedu_rus Нельзя создать все курсы идеальными. Через несколько лет, возможно, Вы будете краснеть за курсы, которые сегодня считаются Вашими лучшими, ведь на тот момент выйдут Ваши новые шедевры! Зато, если Вы их не удалите, то по дате создания можно проследить Ваш рост как блогера и преподавателя!)

  • @ebjikkolu4757
    @ebjikkolu4757 Год назад +1

    typedef struct
    {
    __I uint32_t PDID;
    } SYS_T;
    #define AHBPERIPH_BASE ((uint32_t)0x50000000)
    #define SYS_BASE (AHBPERIPH_BASE + 0x00000)
    #define SYS ((SYS_T *) SYS_BASE)
    Что скажете насчет такого? Я предполагаю ,что тут резервируется память размера int по адресу 0x50000000 и создается указатель на эту память в виде SYS структуры.Привет из мира микроконтроллеров

    • @unethicql
      @unethicql 7 месяцев назад

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

    • @ebjikkolu4757
      @ebjikkolu4757 7 месяцев назад

      Разве? Создаётся структура , делается указатель на структуру . Да- это сделано через дефайны .Потом через этот указатель идёт обращение к структуре . Разница лишь в том , что указатель создаётся с конкретным адресом в памяти ,а не через маллок . Я это написал для общего развития . Показать как идёт обращение к памяти в МК. Чтобы понять данный код ,нужно знать язык си и не более ,да там есть переопределение __I ,все остальное читаемо

    • @unethicql
      @unethicql 7 месяцев назад

      @@ebjikkolu4757 Смотри, вот грубо говоря ты написал:
      SYS_T* ptr = SYS;
      Что мы имеет?
      ptr - имеет адрес SYS_BASE на структуру SYS_T. Выделена ли память под нее?
      Если взять чистый си - нет.
      Но у микроконтроллеров есть куча нюансов, и например область памяти, например, с 0x000C до 0x00FFF можно использовать под свои нужды. Тогда да, тут ты взял просто указатель на ячейку памяти (ничего не выделяя).
      Но, например в ОС Windows такое может либо крашнуть программу, либо привести к undefined behavior.

    • @ebjikkolu4757
      @ebjikkolu4757 7 месяцев назад

      Нет ,никакой памяти не выделяется . По сути адреса в памяти шестнадцатиричные заменяются на данные в структуре , это как переменная за которой хранится просто адрес в памяти . Конечно в виндовс тебе такого сделать не получится ,я думал это итак понятно

  • @elliotalderson6609
    @elliotalderson6609 Год назад +1

    Вообще я не уверен, что компилятор копирует аргументы в константные параметры функции..

    • @selfedu_rus
      @selfedu_rus  Год назад +1

      Если найдете точный ответ, напишите!

    • @elliotalderson6609
      @elliotalderson6609 Год назад +1

      @@selfedu_rus Посмотрел, что по этому поводу пишут на stack overflow: пишут, что копируются. Я уверен, что не всегда (уж точно не в случае inline функций). Можно на godbolt проверить.

    • @selfedu_rus
      @selfedu_rus  Год назад

      @@elliotalderson6609 это совпало с моим пониманием, спасибо! P.S. в чистом Си inline-функции отсутствуют.

    • @elliotalderson6609
      @elliotalderson6609 Год назад

      @@selfedu_rus Тут Вы ошибаетесь, в Си есть инлайн функции

  • @oleg_kishinskii
    @oleg_kishinskii Год назад +2

    На 9й минуте перестал понимать даже человеческую речь 😅