Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
нечетные.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
59.67 Кб
Скачать

23.Операции динамического распределения памяти.

В языке С для динамического выделения и освобождения памяти используются фун­кции malloc() и free(). Вместе с тем С++ содержит два оператора, выполняющих выделение и освобождение памяти более эффективно и более просто. Этими операторами являются new и delete. Их общая форма имеет вид:

переменная_указатель = new тип_переменной;  

delete переменная_указатель;

Здесь переменная_указaтель является указателем типа тип_переменной. Оператор new выделяет память для хранения значения типа тип_переменной и возвращает ее адрес. С помощью new могут быть размещены любые типы данных. Оператор delete освобождает память, на которую указывает указатель переменная_указатель.

Оператор delete следует использовать только для указателей на память, выделенную с исполь­зованием оператора new. Использование оператора delete с другими типами адресов может по­родить серьезные проблемы.

#include<iostream.h>

void main()

{char *name; //выделяем ячейку памяти для переменной

name=new char[64]; //name

cout<<"enter your name"<<endl;

cin>>name;

cout<<name<<endl;

delete name;//удаляем переменную,тем самым освобождаем занятую ячейку

}

С помощью new можно размещать массивы. Общая форма для одномерного массива имеет вид:

переменная_указатель = new тип_переменной [размер];

Здесь размер определяет число элементов в массиве. Необходимо запомнить важное ограничение при размещении массива: его нельзя инициализировать.

Для освобождения динамически размещенного массива необходимо использовать следующую форму оператора delete:

delete [] переменная_указатель;

Здесь скобки [] информируют оператор delete, что необходимо освободить память, выделенную для массива.

По умолчанию, если ваша программа не освобождает выделенную ей память до своего завершения, операционная система автоматически освобождает эту память после завершения программы. Однако если ваша программа использует оператор delete для освобождения памяти по мере того, как она (память) становится ненужной, то эта память вновь становится доступной для других целей (возможно, для вашей программы, которая опять будет использовать оператор new, или для операционной системы).

25.Передача значений параметров по умолчанию. Передача параметров по ссылке и ссылочные переменные.

По умолчанию С и С++ передает аргументы в функцию, используя передачу по значению. Это означает, что функция использует копии аргументов, благодаря чему предотвращается возмож­ность модификации аргументов функции. Если требуется предоставить функции возможность из­менять значения своих переменных-аргументов, то в языке С параметры должны быть объявлены явным образом как указатели. Тогда функция будет обрабатывать значения вызванных перемен­ных, используя оператор *. //пример использования вызова функции по значениям указателей:

#include<iostream.h>

int fun(int* p);//prototip funkcii fun

void main()

{int k;//obyavlenie peremennoi k celogo tipe

k=10;//prisvaivanie k znacheniya 10

cout<<k<<endl;//vyvod znachenia k t.e. 10 vyvoditsya na ekran

cout<<fun(&k)<<endl;//vyzov funkcii fun po ssylke

}

int fun(int *p)//sams funkcia,telo

{*p=666;//peremennoi, na kotoruyu ssylaetsya dannyi ukazatel',prisvoeno znachenie 666

return *p;

}//результатом данной программы является вывод на экран значения переменной k до и после вызова функции, т.е. выводится 10,потом 666

В С++ можно создавать передаваемые по ссылке параметры. Для этого при объявлении функ­ции перед параметром ставится знак амперсанта &. В качестве примера рассмотрим функцию: void f(int &f) { f = rand(); // изменяет переданный аргумент }

Обратим внимание, что инструкция f = rand(); не использует оператор *. При объявлении параметра-ссылки компилятор С++ знает, что это неявный указатель, и обрабатывает его соответствующим образом. Всякий раз при вызове функ­ции f() ей автоматически передается адрес аргументов

//пример использования вызова функции по ссылке:

#include<iostream.h>

int fun(int& p);//prototip funkcii fun

void main()

{int k;//obyavlenie peremennoi k celogo tipa

k=10;//prisvaivanie k znacheniya 10

cout<<k<<endl;//vyvod znachenia k t.e. 10 vyvoditsya na ekran

cout<<fun(k)<<endl;//vyzov funkcii fun

}

int fun(int &p)//sams funkcia,telo

{p=666;

return p;

}