Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию