Язык программирования Си для персонального компьютера | страница 73
Операция адресации не может применяться к битовым полям, а также к идентификаторам, объявленным с классом памяти register.
См. примеры после описания операции косвенной адресации.
Операция косвенной адресации осуществляет доступ к значению по указателю. Ее операнд должен иметь тип указатель. В качестве операнда может также выступать идентификатор массива; в этом случае он преобразуется к указателю на тип элементов массива, и к этому указателю применяется операция косвенной адресации.
Результатом операции является значение, на которое указывает операнд. Типом результата является тип, ассоциированный с этим указателем. Если указателю перед операцией не было присвоено никакого значения, то результат непредсказуем.
Примеры:
int *ра, х;
int a[20];
double d;
pa = &а[5]; /* пример 1 */
x = *ра; /* пример 2 */
if ( х == *&x ) /* пример 3 */
printf("BEPHO\n");
d = *(double *)(&x); /* пример 4 */
В первом примере операция адресации вырабатывает адрес шестого (по порядку следования) элемента массива а. Результат записывается в адресную переменную (указатель) ра.
Во втором примере используется операция косвенной адресации для доступа к значению типа int, адрес которого хранится в указателе ра. Результат присваивается целой переменной х.
В третьем примере будет печататься слово ВЕРНО. Пример демонстрирует симметричность операций адресации и косвенной адресации: *&х эквивалентно х.
Четвертый пример показывает полезное приложение этого свойства. Адрес х преобразуется операцией приведения типа к типу указатель на double. К полученному указателю применяется операция косвенной адресации. Результатом выражения является значение типа double.
Операция sizeof определяет размер памяти, который соответствует объекту или типу. Операция sizeof имеет следующий вид:
sizeof <выражение>
sizeof (<абстрактное имя типа>)
Операндом является либо <выражение>, либо абстрактное имя типа в скобках. Результатом операции sizeof является размер памяти в байтах, соответствующий заданному объекту или типу. Тип результата — unsigned int. Если размер объекта не может быть представлен значением типа unsigned int (например, в СП MSC допустимы массивы типа huge размером более 64 Кбайтов), то следует использовать приведение типа:
(long) sizeof <выражение>
В СП MSC версии 4 допустимым выражением является L-выражение, а в версии 5 и в СП ТС — произвольное выражение. Следует учитывать, что само <