Занятие 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