Инициализация указателей
Указатели чаще всего используют при работе с динамической памятью. Доступ к выделенным участкам динамической памяти, называемым динамическимипеременными, производится только через указатели. Время жизни динамических переменных — от точки создания до конца программы или до явного освобождения памяти. В С++ используется два способа работы с динамической памятью. Первый использует семейство функций malloc и достался в наследство от С, второй использует операции new и delete. Существуют следующие способы инициализации указателя: 1. Присваивание указателю адреса существующего объекта: · с помощью операции получения адреса: int a = 5;//целая переменная int* p = &a;//в указатель записывается адрес a int* p (&a);//то же самое другим способом · значения другого инициализированного указателя: int* r = p; · имени массива или функции, которые трактуются как адрес: int b[10];//массив int* t = b;// Присваивание имени массива ... void f(int a){ /* … */ }// Определение функции void (*pf)(int);// Указатель на функцию pf = f;// Присваивание имени функции 2. Присваивание указателю адреса области памяти в явном виде: char* vp = (char *)0xB8000000;//шестнадцатиричная константа 3. Присваивание пустого значения: int* suxx = NULL; int* rulez = 0; 4. Выделение участка динамической памяти и присваивание ее адреса указателю: · с помощью операции new: int* n = new int;// 1 int* m = new int (10);// 2 int* q = new int [10];// 3 · с помощью функции malloc: int* u = (int*)malloc(sizeof(int));// 4 Освобождение памяти, выделенной с помощью операции new, должно выполняться с помощью delete, а памяти, выделенной функцией malloc — посредством функции free. При этом переменная-указатель сохраняется и может инициализироваться повторно. Приведенные выше динамические переменные уничтожаются следующим образом: delete n; delete m; delete [] q; free (u);
ВНИМАНИЕ Если переменная-указатель выходит из области своего действия, отведенная под нее память освобождается. При этом память из-под самой динамической переменной не освобождается.
|