Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Указатель на указатель
Указатели, как и переменные любого другого типа, могут объединяться в массивы. Объявление массива указателей р на целые числа: int *р[10], y; Теперь каждому из элементов массива указателей р можно присвоить адрес переменной y, например: р [1] = & y; Чтобы найти значение переменной y через данный элемент массива р, необходимо записать * р [1]. В языке Си можно описать переменную типа «указатель на указатель». Это ячейка памяти (переменная), в которой будет храниться адрес указателя на некоторую переменную. Признак такого типа данных – повторение символа «*» перед именем переменной. Количество звездочек определяет уровень вложенности указателей друг в друга. При объявлении указателей на указатели возможна их инициализация. Например: int a = 5; int *p = &a; int **pp = &p; int ***ppp = &pp; Если присвоить переменной а новое значение: a=10; то следующие величины будут иметь такие же значения 10: *p **pp ***ppp Для доступа к памяти, отведенной под переменную а можно использовать и индексы, т.е. следующие выражения - эквивалентны: *p ~ p[0]; **pp ~ pp[0][0]; ***ppp ~ ppp[0][0][0]. Фактически, используя указатели на указатели, мы имеем дело с многомерными массивами. 34. Работа с динамической памятью. Операции new, delete. Работа с динамическими массивами связана с опера-циями их создания и уничтожения по запросу программы, при котором выделение (захват) и освобождение памяти производится не на этапе обработки программы, как для статических массивов, а в процессе ее выполнения. Для объявления динамических массивов используются указатели. В языке С++ для захвата и освобождения памяти используется более простой механизм – операции new и delete. Рассмотрим эти операции на простых примерах: 1) type * p = new type (Значение); – захват участка памяти размером sizeof (type), путем установки на него указателя, и запись в эту область указанного Значения; например: int *p = new int(5); соответствует int *p = new int; *p = 5; Тогда для освобождения захваченной памяти delete p; 2) type * p = new type [ n ]; – захват памяти на n последовательно размещенных объектов, возвращает указатель на начало участка ОП размером n * sizeof (type); используется для создания массива; В этом случае освобождение всей захваченной памяти delete [ ] p; Результат операции new – адрес начала выделенного участка памяти для размещения данных, указанного типа и количества, при возникновении ошибки (например, при нехватке памяти) результат равен NULL. Причем операция delete (удалить) не уничтожает значения, находящиеся по указанным адресам, а разрешает компилятору использовать ранее занятую память. Но попытка использовать эти значения может привести к непредсказуемым результатам. Квадратные скобки в операции delete при освобождении памяти, занятой массивом, обязательны. Их отсутствие также может привести к непредсказуемым результатам Date: 2015-08-15; view: 557; Нарушение авторских прав |