Для определения размера памяти, необходимого для размещения объектов в языке С, используется унарная операция sizeof (параметр), параметр – тип объекта или его идентификатор (только не имя функции). Операция sizeof вычисляет размер памяти в байтах, отводимый под объект. Если указан идентификатор сложного объекта (массив, структура, объединение), то результатом является размер всего сложного объекта. Например:
sizeof(int) результат 2 байта;
int b[5]; sizeof(b) результат 10 байт;
int c[3][4]; sizeof(c) результат 24 байта.
Указатели и операции над адресами
Обращение к объектам любого типа в языке C может проводиться по имени, как мы до сих пор делали, и по указателю (косвенная адресация).
Указатель – это переменная, которая может содержать адрес некоторого объекта в памяти компьютера, например, адрес другой переменной. И через указатель, установленный на переменную, можно обращаться к участку оперативной памяти, отведенной компилятором под ее значения.
Указатель объявляется следующим образом:
<тип> * <идентификатор>;
|
|
Например:
int *a, *d;
float *f;
Здесь объявлены указатели a, d, которые можно инициализировать адресами целочисленных переменных, и указатель f, который можно инициализировать адресами вещественных переменных.
С указателями связаны две унарные операции: & и *. Операция & означает «взять адрес». Данная операция допустима только над переменными. Операция * - «значение, расположенное по указанному адресу» и работает следующим образом:
- определяется местоположение в оперативной памяти переменной типа указатель;
- извлекается информация из этого участка памяти и трактуется как адрес переменной с типом в объявлении указателя;
- производится обращение к участку памяти по выделенному адресу для проведения некоторых действий.
Пример:
int x, // переменная типа int
*y; // указатель на элемент данных типа int
y=&x; // y - адрес переменной x
*y=1; // по адресу y записать 1, в результате x = 1