logo
lab_C-08

Имена массивов и указатели

В Си разница между именем одномерного массива и указателем на тип элементов этого массива проявляется в двух случаях:

1. Использование имени массива в роли указателя.

Имена массивов трактуются компилятором как адреса, а именованные адреса в Си называются указателями.

Обычно под указателем понимают переменную, т.е. объект, который при выполнении программы может изменить свое значения. Для изменения значения переменная должна быть помещена в левую часть оператора присваивания (использоваться как l-value).

Но имена массивов — это особый тип указателей. Они обозначают адрес, который меняться не может (указатель-константа). Поэтому имена массивов (без индексов) могут появляться только в правых частях выражений (использоваться только, как r-value)

Пример 1.

В программе определены одномерный массив и указатель, который инициализируется адресом массива.

int arr[12], *pa=arr;

arr++ ; /* Ошибка! Объяснить, почему? */

pa++; /* Правильно */

2. Использование имени массива для вычисления размер объекта.

Результатом применения операции sizeof к имени массива будет размер отведенной массиву памяти (в байтах).

Если применить операцию к однотипному с массивом указателю (pa), то будет вычислен размер указателя, т.е. объем памяти, используемый в программе для хранения адреса.