#54. Указатели на структуры. Передача структур в функции | Язык C для начинающих
HTML-код
- Опубликовано: 8 фев 2025
- Практический курс по C/C++: stepik.org/cou...
Телеграм-канал: t.me/java_and_c
Инфо-сайт: proproprogs.ru...
Объявление указателей на структуры. Оператор доступа к полям структуры через указатели. Порядок передачи структур в параметры функции.
Видеоурок как всегда на высшем уровне! Я рад, что Сергей в конце услышал мой внутренний голос и создал тип VECTOR. Ещё хочу немного от себя сказать, чтоб программирование изучать, мы учим математику, константы и радуемся, когда программа вычисляет сама дискриминанты. И спустя несколько лет выводим результат не в консоль, а в ui-окно, благодаря Сергею, нам всё это давно дано!😶
Очень познавательно, спасибо, Сергей!!!
Спасибо. Подача материала если и не иделальна, то очень близка к идеальной.
ну хоть тут понятно все) Спасибо что помогаете разбираться в ЯП СИ)
Спасибо тебе большое дружище, очень приятный урок. Было бы классно увидеть от тебя реализацию односвязного и двусвязного списка на Си! Добра тебе :)
Спасибо за урок !!! Очень познавательно !!!
После C я очень полюбил структуры, через них легко использовать общую память, в код программы достаточно скопировать определённую структуру, подключиться к памяти, и после задать указателю тип структуры, после можно спокойно по ней бегать и читать или писать данные.
Классный вектор из одной точки, бро )
Спасибо.
Когда заменил обозначение структуры псевдонимом, программа сработала на 17 тысячных секунды быстрее.
Попытался в ООП в Си. Сделал функцию, принимающую объект типа моей структуры, сделал логику. Ниже написал структуру, в ней указатель на функцию.
Компилятор говорит, что функция не знает такой тип, который принимает.
Поместил функцию ниже структуры.
Теперь указатель в структуре не знает, на какую функцию он ссылается.
Вышел на балкон, закурил, долго думал, плакал.
19:10 верно ли что второй аргумент (непосредственно инициализированный в списке аргументов при вызове) будет скомпилирован и лежать в .text секции ? или там все таки в рантайме в вызове isum_vector будет выделено на стеке для noname аргумента ?
Добрый день! не планируете сделать курс платный/бесплатный про perl, регулярки, для души так сказать? Отличный курс про C!!!
Спасибо! По perl нет, а регулярки для Python уже есть.
Здравствуйте, интересное и познавательное видео. Можно ли каким-то образом узнать скорость выполнения программы и дать оценку например насколько быстрее выполняется код при передаче структуры в функцию через указатель, а не по значению? И в каких единицах измерения правильнее оценивать скорость выполнения кода (программы)?
Скорость программ определяют, либо фактически по времени, либо по объему операций, используя концепцию Big O (О большое). Подробнее о ней в курсе по структурам данных.
Сергей хотел бы узнать будет ли у вас курс по java на степике?
не знаю насколько востребовано, сам курс по Java у меня провалился, не смотрят
@@selfedu_rus У меня к вам вопрос как к специалисту какой язык учить для бэкенда?
@@МагомедИбрагимов-с8ъ зависит от компании, смотря что требуют. Если вообще, то PHP, Python, C# часто используются.
ruclips.net/video/yWmFfpPz2A4/видео.html alt+shift+down - дублировать строку
17:15 не удобнее ли будет в sum_vector аргуметы передать по ссылке: sum_vector(const struct tag_vector&, const struct tag_vector&) ?
Ссылки & есть в С++, но нет в Си.
Сергей, после данного курса Вы планируете перезаписать свой ранний курс по с++ или будет другая тема?
Базу по С++ не планирую, а ООП, вроде нормально дано. Те уроки по основам С++ удалю после выхода этого курса.
@@selfedu_rus Зачем удалять? Разве они плохие? Оставьте их пожалуйста для сообщества!)
@@АлександрКаптуров-с8и убого там все, как то даже неудобно за них ))
@@selfedu_rus Нельзя создать все курсы идеальными. Через несколько лет, возможно, Вы будете краснеть за курсы, которые сегодня считаются Вашими лучшими, ведь на тот момент выйдут Ваши новые шедевры! Зато, если Вы их не удалите, то по дате создания можно проследить Ваш рост как блогера и преподавателя!)
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 структуры.Привет из мира микроконтроллеров
это не имеет отношения к видео. к тому же, чтобы понять, что делает данный код, нужно знать архитектуру и компилятор для этого кода
Разве? Создаётся структура , делается указатель на структуру . Да- это сделано через дефайны .Потом через этот указатель идёт обращение к структуре . Разница лишь в том , что указатель создаётся с конкретным адресом в памяти ,а не через маллок . Я это написал для общего развития . Показать как идёт обращение к памяти в МК. Чтобы понять данный код ,нужно знать язык си и не более ,да там есть переопределение __I ,все остальное читаемо
@@ebjikkolu4757 Смотри, вот грубо говоря ты написал:
SYS_T* ptr = SYS;
Что мы имеет?
ptr - имеет адрес SYS_BASE на структуру SYS_T. Выделена ли память под нее?
Если взять чистый си - нет.
Но у микроконтроллеров есть куча нюансов, и например область памяти, например, с 0x000C до 0x00FFF можно использовать под свои нужды. Тогда да, тут ты взял просто указатель на ячейку памяти (ничего не выделяя).
Но, например в ОС Windows такое может либо крашнуть программу, либо привести к undefined behavior.
Нет ,никакой памяти не выделяется . По сути адреса в памяти шестнадцатиричные заменяются на данные в структуре , это как переменная за которой хранится просто адрес в памяти . Конечно в виндовс тебе такого сделать не получится ,я думал это итак понятно
Вообще я не уверен, что компилятор копирует аргументы в константные параметры функции..
Если найдете точный ответ, напишите!
@@selfedu_rus Посмотрел, что по этому поводу пишут на stack overflow: пишут, что копируются. Я уверен, что не всегда (уж точно не в случае inline функций). Можно на godbolt проверить.
@@elliotalderson6609 это совпало с моим пониманием, спасибо! P.S. в чистом Си inline-функции отсутствуют.
@@selfedu_rus Тут Вы ошибаетесь, в Си есть инлайн функции
На 9й минуте перестал понимать даже человеческую речь 😅