Я наткнулся на код, содержащий следующее:
struct ABC {
unsigned long array[MAX];
} abc;
Когда имеет смысл использовать подобное объявление?
c
arrays
coding-style
struct
Joe.Z
источник
источник
Еще одно преимущество состоит в том, что он абстрагирует размер, поэтому вам не нужно использовать
[MAX]
весь код везде, где вы объявляете такой объект. Этого также можно добиться с помощьюно тогда у вас есть гораздо более серьезная проблема: вы должны знать, что
ABC
это тип массива (даже если вы не видите этого, когда объявляете переменные типаABC
), иначе вы будете ужалены тем фактом, что этоABC
будет означать что-то другое в списке аргументов функции по сравнению с объявлением / определением переменной.Еще одно преимущество состоит в том, что структура позволяет вам позже при необходимости добавлять дополнительные элементы без необходимости переписывать много кода.
источник
Вы можете скопировать структуру и вернуть структуру из функции.
Вы не можете сделать это с массивом - если он не является частью структуры!
источник
Вы можете скопировать это так.
Для массива вам нужно будет использовать функцию memcpy или цикл для назначения каждого элемента.
источник
Вы можете использовать структуру для создания нового типа данных, например строки . вы можете определить:
или вы можете создать список данных, которые вы можете использовать в качестве аргумента функций или вернуть в своих методах. Структура более гибкая, чем массив, потому что она может поддерживать некоторые операторы, такие как =, и вы можете определять в ней некоторые методы.
Надеюсь, это будет полезно для вас :)
источник
Еще одно преимущество использования такого типа
struct
заключается в том, что он обеспечивает безопасность типов везде, гдеstruct
он используется; особенно если у вас есть два типа, состоящих из массивов одинакового размера, используемых для разных целей, эти типы помогут вам избежать случайного использования массива ненадлежащим образом.Если вы не оборачиваете массив в a
struct
, вы все равно можете объявитьtypedef
для него a : это имеет некоторые из преимуществ:struct
• тип объявляется один раз, • размер автоматически корректируется, • смысл кода становится более ясным, • а код более удобен в обслуживании, но вы теряете ◦ строгую безопасность типов, ◦ возможность копировать и возвращать значения типа и ◦ возможность добавлять элементы позже, не нарушая остальной код. Дваtypedef
s для пустых массивов данного типа дают разные типы, только если они имеют разные размеры. Более того, если вы используетеtypedef
без*
аргумента функции, это эквивалентноchar *
значительному снижению безопасности типов.В итоге :
источник
Структура может содержать функции инициализации массива, копирования и завершения, имитирующие некоторые преимущества парадигм управления памятью ООП. Фактически, очень легко расширить эту концепцию, чтобы написать универсальную утилиту управления памятью (используя структуру sizeof (), чтобы точно знать, сколько байтов обрабатывается) для управления любой структурой, определяемой пользователем. Многие интеллектуальные производственные кодовые базы, написанные на C, интенсивно используют их и обычно никогда не используют массив, если его область действия не является очень локальной.
Фактически, для массива, встроенного в структуру, вы могли бы делать другие «умные вещи», такие как проверка привязки, в любое время, когда вы хотели получить доступ к этому массиву. Опять же, если объем массива не очень ограничен, использовать его и передавать информацию между программами - плохая идея. Рано или поздно вы столкнетесь с ошибками, которые не дадут вам уснуть по ночам и испортят ваши выходные.
источник
struct
содержащий только массив.