Занятие 3. Указатели. Ссылки. Массивы. Работа со строками.

Теоретическая часть.

Указатели

Когда компилятор обрабатывает оператор определения переменной, например, int j=10;, он выделяет память в соответствии с типом (int) и инициализирует ее указанным значением (10). Все обращения в программе к переменной по ее имени (j) заменяются компилятором на ее адрес области памяти, в которой хранится значение переменной. Адресом участка оперативной памяти является номер байта с которого начинается этот участок. Программист может определить собственные переменные для хранения адресов областей памяти. Такие переменные называются указателями. Указатель – это переменная, которая содержит адрес другой переменной или функции. Описание указателя

тип_ данных *имя_указателя;

Звездочка относится непосредственно к имени_указателя, поэтому, чтобы объявить несколько указателей, требуется ставить ее перед каждым именем.

Примеры объявления указателей.

1) int *pi, a, b, *pk; // Объявляются две целых переменных a и b, и два указателя pi и pk на // переменные целого типа

2) double *pa, b; // Объявление переменной b типа double и указателя pa на тип double

3) char *ptext; // Объявление указателя ptext на переменную типа char

Операции разыменования и взятия адреса

Символ звездочка используется не только для объявления указателя, но и как оператор разыменования для доступа к содержимому области памяти, на которую указывает указатель. Компилятор по контексту определяет, как именно должен использоваться символ звездочка.

Примеры разыменования указателей.

1)*pi=5; // Присваивает значение 5 переменной по адресу в указателе pi

2)*ptext=’h’; // Присваивает значение ‘h’ переменной по адресу в указателе ptext

Объявление указателя выделяет память для него, но пока ему не присвоено никакое значение, он ни на что не указывает. Для получения адреса какого-либо объекта используется операция взятия адреса &.

Пример использования операции взятия адреса.

сhar cval, *pc;

int ival, *pi;

pc=&cval; // Указатель pc содержит адрес переменной cval

pi=&ival; // Указатель pi содержит адрес переменной ival