Доступ к отдельному биту
В отличие от других языков программирования язык Си обеспечивает доступ к одному или нескольким битам в байте или слове. Это имеет свои преимущества. Если многие переменные принимают только два значения, (такие переменные называют флагами), то можно использовать 1 бит.
Один из методов, встроенных в язык Си и позволяющих иметь доступ к биту, – это поля битов (bit-fields). В действительности поля битов – это специальный тип структуры, в котором определено, из каких бит состоит каждый элемент. Основная форма объявления такой структуры следующая:
struct имя_ структуры
{
тип имя 1: длина в битах ;
тип имя 2: длина в битах ;
…………………………. ;
тип имя N: длина в битах ;
}
В этом объявлении структур тип может быть одним из следующих: int, unsigned, signed. Имя I может быть пропущено, тогда соответственно число бит не используется (пропускается). Длина структуры всегда кратна восьми. Так, если указать:
struct onebit
{
unsigned one_bit : 1;
} obj ;
то для переменой obj будет выделено 8 бит, но использоваться будет только первый.
6.5. Переименование типов – typedef
Язык Си с помощью оператора typedef позволяет задавать новое имя уже существующим переменным. При этом не создается новый тип данных.
Например:
typedef char SIMBOL;
typedef unsigned UNSIGN;
typedef float real;
Достаточно часто используется оператор typedef с применением структур:
typedef struct st_tag {
char name[30];
int kurs;
char group[3];
int stip;
} STUDENT;
Теперь для определения переменной можно использовать
struct st_tag avar;
а можно использовать
STUDENT avar;
Выделение памяти и управление ею
Определение размера выделяемой памяти (операция sizeof)
С помощью этой операции можно определить в байтах размер памяти, которая соответствует идентификатору или типу. Выражение с операцией sizeof имеет следующий формат
sizeof (выражение)
Выражение - это либо идентификатор, либо имя типа, заключенное в круглые скобки:
sizeof (имя_объекта) ;
Идентификатор не может относиться к полю битов или быть именем функции.
Если имя типа описывает массив, то результатом является размер всего массива, а не размер указателя, состветствующий имени массива.
Пример 7.1:
# include <stdio. h>
# include <conio. h>
void main (void)
{
float mas[100];
clrscr();
printf( “Размер одного элемента массива %d в байтах\n, sizeof ( mas[20]));
printf( “Размер всего массива %d в байтах\n, sizeof ( mas));
getch();
}
Результат выполнения программы:
Размер одного элемента массива 4 байта.
Размер всего массива 400 байт.
Дата добавления: 2017-06-02; просмотров: 336;