ВУЗ:
Составители:
Рубрика:
13
int b = *ptr_a; //считывание значения переменной а
*ptr_a = 20; //запись числа 20 в переменную а
Здесь переменной b присваивается значение переменной a через указатель
ptr_a, а, затем, переменной a присваивается значение 20. Таким образом, для
записи и считывания значений с помощью указателя необходимо перед его
именем ставить символ ‘*’ и использовать оператор присваивания.
Каждый раз при работе с указателями необходимо выполнять их
инициализацию, т.е. задавать адрес на выделенную область памяти
. Сложность
работы с указателями заключается в том, что при их объявлении они указывают
на произвольную область памяти, с которой можно работать как с обычной
переменной. Приведем такой пример
int* ptr;
*ptr = 10;
В результате в произвольную область памяти будет записано два байта со
значениями 10 и 0. Это может привести к необратимым последствиям в работе
программы и к ее ошибочному завершению. Поэтому перед использованием
указателей всегда нужно быть уверенным, что они предварительно были
инициализированы.
Рассмотрим возможность использования указателей при работе с
массивами. Допустим, что
объявлен массив целочисленного типа int
размерностью в 20 элементов:
int array[20];
Элементы массивов всегда располагаются друг за другом в памяти ЭВМ,
начиная с первого, индекс которого равен 0 (рис. 2).
Байты
0 1 2 3 4 … 21 22 23 … 60 61 62 … 1000 1001 1002
Массив int array[20]
Элемент array[0]
Рис. 2. Условное расположение массива int array[20] в памяти ЭВМ
Из рис. 2 видно, что для получения адреса массива array достаточно знать
адрес его первого элемента array[0], который можно определить как адрес
переменной и присвоить его указателю:
int* ptr_ar = &array[0];
Однако в языке С предусмотрена более простая конструкция для определения
адреса массивов, которая записывается следующим образом:
Страницы
- « первая
- ‹ предыдущая
- …
- 11
- 12
- 13
- 14
- 15
- …
- следующая ›
- последняя »