Хелпикс

Главная

Контакты

Случайная статья





int* г = р;. int* suxx = NULL;. int* rulez = 0;. int* n = new int; //1. int* m = new int (10); // 2. int* q = new int [10]; // 3. int* u = (int *)malloc(sizeof(int)); // 4



int* г = р;

- с помощью имени массива или функции, которые трактуются как адрес:

int b[10]; // массив

int * t = b; // присваивание адреса начала массива

void f (int а){/* ... * /} // определение функции

void (*pf) (int); // указатель на функцию

pf = f;// присваивание адреса функции

2. Присваивание указателю адреса области памяти в явном виде:

char* vp = (char *)0хВ8000000;

Здесь ОхВ8000000 – шестнадцатеричная константа, (char *) – операция приведения типа: константа преобразуется к типу «указатель на char».

3. Присваивание пустого значения:

int* suxx = NULL;

int* rulez = 0;

В первой строке используется константа NULL, определенная в некоторых заголовочных файлах С как указатель, равный нулю. Рекомендуется использовать просто 0, так как это значение типа int будет правильно преобразовано стандартными способами в соответствии с контекстом. Поскольку гарантируется, что объектов с нулевым адресом нет, пустой указатель можно использовать для проверки, ссылается указатель на конкретный объект или нет.

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

В операторе 1 операция new выполняет выделение достаточного для размещения величины типа int участка динамической памяти и записывает адрес начала этого участка в переменную n. Память под саму переменную n (размера, достаточного для размещения указателя) выделяется на этапе компиляции.

В операторе 2, кроме описанных выше действий, производится инициализация выделенной динамической памяти значением 10.

В операторе 3 операция new выполняет выделение памяти под 10 величин типа int (массива из 10 элементов) и записывает адрес начала этого участка в переменную q, которая может трактоваться как имя массива. Через имя можно обращаться к любому элементу массива.

Если память выделить не удалось, по стандарту должно порождаться исключение bad_alloc. Старые версии компиляторов могут возвращать 0.

В операторе 4 делается то же самое, что и в операторе 1, но с помощью функции выделения памяти malloc. В функцию передается один параметр – количество выделяемой памяти в байтах. Конструкция (int*) используется для приведения типа указателя, возвращаемого функцией, к требуемому типу. Если память выделить не удалось, функция возвращает 0.

Операцию new использовать предпочтительнее, чем функцию malloc, особенно при работе с объектами.

Освобождение памяти, выделенной с помощью операции new, должно выполняться с помощью delete, а памяти, выделенной функцией malloc – посредством функции free. При этом переменная-указатель сохраняется и может инициализироваться повторно. Приведенные выше динамические переменные уничтожаются следующим образом:



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.