Язык программирования C. Составные типы данных. Битовые поля – члены структуры или объединения

Страницы работы

Фрагмент текста работы

  • union тег { тип имя_члена; … тип имя_члена; } список_переменных;

  • Пример:
  • union { int i; struct { char h_b;
  • char l_b;} j; } a;

i

l_b

h_b

a

Объединения

Объединения часто используются тогда, когда нужно выполнить специфическое преобразование типов, потому что хранящиеся в объединениях данные можно обозначить совершенно разными способами. Например, используя объединения, можно манипулировать байтами, составляющими значение типа double, и делать так, чтобы менять его точность или выполнять какое-либо необычное округление. Чтобы получить представление о полезности объединений в случаях, когда нужны нестандартные преобразования, подумайте над проблемой записи целых значений типа short в файл, который находится на диске.

Битовые поля – члены структуры или объединения

  • Поддержка битовых полей дает возможность получать доступ к единичному биту. Битовые поля могут быть полезны по разным причинам:
  • Если память ограничена, то в одном байте можно хранить несколько булевых переменных.
  • Некоторые устройства передают информацию о состоянии, закодированную в байте в одном или нескольких битах.
  • Для некоторых процедур шифрования требуется доступ к отдельным битам внутри байта.

Битовые поля – члены структуры или объединения

Хотя для решения этих задач можно успешно применять побитовые операции, битовые поля могут придать Вашему коду больше упорядоченности (и, возможно, с их помощью удастся достичь большей эффективности). Битовое поле может быть членом структуры или объединения. Для доступа к битовым полям используются те же операторы, что и для полей структур и объединений: точки и стрелки. Нет необходимости давать имя каждому битовому полю. Нельзя получить адрес битового поля. Нет массивов битовых данных.

Битовые поля – члены структуры или объединения

  • Пример:
  • struct { int a:4;
  • int b:4;
  • char c; } c;
  • c.a = 0; c.b = 3; c.c = '\0';
  • void* ptr = &c;
  • printf(“c = %i”, *((int*)ptr);

  • Формат:
  • struct или union тег { тип имя: длина; … тип имя: длина; } список_переменных;
  • Здесь тип – это int, signed, unsigned
  • (_Bool для С99)

0

0

3

Перечисление – набор именованных целых констант

Сначала с помощью шаблона задается перечислимый тип. Далее, как обычно, можно создавать переменные данного типа. Главное, что нужно знать для понимания перечислений – каждый их элемент представляет целое число. В таком виде элементы перечислений можно применять везде, где используются целые числа. Каждому элементу дается значение, на единицу больше, чем у его предшественника. Первый элемент перечисления имеет значение 0. Однако для некоторых элементов можно указать значение, используемое как инициализатор.

Перечисление – набор именованных целых констант

  • Формат: enum тег { список_перечисления } список_переменных;
  • Пример
  • enum {m,t,w,th,f,s,su} d;

  • Пример
  • enum rmsk { I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000 } i;
  • i = M+D;
  • Результат: i = 1500

Средство typedef

Новые имена типов данных можно определять, используя ключевое слово typedef. На самом деле таким способом новый тип данных не создается, а всего лишь определяется новое имя для уже существующего типа. Этот процесс может помочь сделать машинно-зависимые программы сделать переносимыми. Общий вид декларации typedef такой: typedef тип новое_имя; где тип – любой тип данных языка С, а новое_имя – новое имя этого типа. Новое имя является дополнением к уже существующему, а не его заменой.

Файловый ввод-вывод

Потоки и файлы

В системе ввода-вывода С для программ поддерживается единый интерфейс, не зависящий от того, к какому конкретному устройству осуществляется доступ. То есть в системе между программой и устройством находится нечто более общее, чем само устройство. Такое обобщенное устройство ввода и вывода (устройство более высокого уровня абстракции) называется потоком, в то время как конкретное устройство называется файлом (впрочем, файл – тоже понятие абстрактное). Очень важно понимать, каким образом происходит взаимодействии потоков и файлов.

Потоки и файлы

Потоки. Даже если какое-то устройство сильно отличается от других, буферизованная файловая система все равно представляет его в виде логического устройства, которое называется потоком. Потоки бывают двух видов: текстовые и двоичные. Текстовый поток – последовательность символов. В текстовом потоке по требованию среды могут происходить определенные преобразования символов (символ новой строки может быть заменен парой символов – возврата каретки и перевода строки). Поэтому может и не быть однозначного соответствия между символами

Похожие материалы

Информация о работе