Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Структура в Си
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Anjey_N
Пытался сам понять из книжек что такое структура и зачем она применяется но ничего не понял! Может ли кто-нибудь объяснить зачем она нужна?
jorikdima
удобство обращения к данным.

например если надо описать токую сущность как например человек. создаем тип данных "структура", поля которой: имя фамилия пол телефон...
затем можем создать несколько переменных такого... уже нового типа, а не стандартный int float. Создаем пееременную ВАСЯ тип которой вот такач вот структура, описанная мной ранее. Затем МАШу можем создать.

И к Маше и к Васе будет удобно обращаться. Хочешь узнать телефончик Маши не надо ни цветов дарить ни конфет. Все просто:

МАША.phone

smile.gif
zltigo
Цитата(jorikdima @ Aug 9 2007, 11:56) *
удобство обращения к данным.

К перечисленным удобствам следует добавить union-ы.
И главное не забываем про паковку структур и скрытие нюансов обращения к данным не равным разрядности процессора.
zhevak
не забываем про удобство копирования структур. smile.gif
rezident
Структура это такая абстракция, которая введена в ЯВУ для того, чтобы человеку было удобно работать с данными. Самому же процессору/микроконтроллеру структуры по барабану, он работает не с абстракциями, а с реальными адресами/данными.
Преобразовать абстрактные структуры к реальным данным это задача компилятора. Основная проблема при этом возникает при упаковке и выравнивании структур. А все из-за того, что у разных CPU/MCU разные разрядность шины и способ обращения к данным. Например, у большинства 16-ти разрядных CPU нельзя сделать обращение к 16-битному слову по нечетному адресу. Поэтому, если допустим в неупакованной структуре вы опишите две байтовые (8-ми битные) переменные и попытаетесь обратиться к ним как к одной 16-разрядной переменной, то на разных CPU/MCU можете получить различающиеся артефакты. Поэтому не забывайте о выравнивании структур.
korobov_michael
Цитата(rezident @ Aug 9 2007, 14:04) *
Самому же процессору/микроконтроллеру структуры по барабану, он работает не с абстракциями, а с реальными адресами/данными.

Хочу уточнить. Как раз для АВР его система команд "помогает" компилятору С может сгенерировать очень качественный код при работе со структурами (см. AN035).
Так что чем использовать разрозненные объекты -- я бы склонялся к использованию структур
rezident
Цитата(korobov_michael @ Aug 9 2007, 18:14) *
Как раз для АВР его система команд "помогает" компилятору С может сгенерировать очень качественный код при работе со структурами (см. AN035).

Компилятор Си основывается на системе команд MCU, поэтому не совсем понятен контекст вашей фразы. Помочь компилятору может сам программист. Точнее его стиль написания программы на Си. Если программист пишет, предполагая как бы он писал эту же программу на ASM, то и компилятор сгенерирует код близкий к предполагаемому.
korobov_michael
Цитата(rezident @ Aug 9 2007, 17:35) *
Компилятор Си основывается на системе команд MCU, поэтому не совсем понятен контекст вашей фразы. Помочь компилятору может сам программист. Точнее его стиль написания программы на Си. Если программист пишет, предполагая как бы он писал эту же программу на ASM, то и компилятор сгенерирует код близкий к предполагаемому.

М-да, пожалуй, коряво получилось... Имелось ввиду, что при использовании структуры при последовательном обращении к полям структуры компилятор задействует косвенный режим адресации со смещением, являющийся частью архитектуры, что и приводит к более оптимальному коду по сравнению с рядом других контроллеров
SasaVitebsk
Цитата(korobov_michael @ Aug 9 2007, 23:48) *
М-да, пожалуй, коряво получилось... Имелось ввиду, что при использовании структуры при последовательном обращении к полям структуры компилятор задействует косвенный режим адресации со смещением, являющийся частью архитектуры, что и приводит к более оптимальному коду по сравнению с рядом других контроллеров


Не буду Вам возражать. Возможно немного огорчу. smile.gif Если Вы даже и не используете структуру, то компилятор разрозненные данные тоже групирует и также использует косвенный режим адресации со смещением, являющийся частью архитектуры, что и приводит к более оптимальному коду по сравнению с рядом других контроллеров

Хотя это никоим образом не умаляет важность и удобство структур. smile.gif
rezident
Не хочу чтобы еще и здесь затевались религиозные "войны" типа AVR vs PIC. Просто считаю, что упоминание AVR в контексте данной тематики структур излишнее. Далеко не один только AVR имеет косвенную адресацию wink.gif
zltigo
Цитата(SasaVitebsk @ Aug 10 2007, 00:18) *
Если Вы даже и не используете структуру, то компилятор разрозненные данные тоже групирует...

Точнее может попытатся разобраться с разрозненными даными. И возможно это ему удастся хорошо.
Вопрос только в том зачем усложнять кому-то понимание задачи, если задачу можно просто и без напрягов более четко объяснить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.