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

70 Создание массива с помощью оператора new. Проверка значения, возвращаемого new. Освобождение памяти. Общая схема. Операции над указателями.

Создание массива с помощью оператора new

int n=100

int *pi; // указатель pi

pi = new int [n] // массив из n(100) элементов типа int

Проверка значения, возвращаемого new

int n=1000000000;

int *pi=new int[n];

if(pi==0)

{

cout<<"Невозможно создать массив из "<<n<<" элементов int";

return 1; // Завершаем работу функции main

}

Освобождение памяти

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

delete pi;

При этом сам указатель pi не уничтожается, ему можно присвоить новое значение, однако разыменование этого указателя может привести к ошибке.

Общая схема

int n; // Размер массива

double * p; // Указатель на начало массива

cout<<"Введите размер массива: ";

cin>>n;

p=new double[n]; // Выделяем память

if(p==0) // Проверка успешности выделения памяти

{

cout<<"Невозможно выделить память"<<endl;

return 1; // Завершаем работу

}

for(int i=0;i<n;++i) // Цикл для считывания массива

cin>>p[i]; // Считали i-й элемент массива

//// Теперь выполняем что-нибудь с массивом

delete p; // Освобождаем память

Операции с указателями

p==q Проверка двух указателей на равенство (то есть указывают ли они на одну и ту же ячейку памяти) 

p!=q Проверка на неравенство 

p<q Возвращает true, если ячейка, на которую указывает p находится в памяти раньше, чем ячейка, на которую указывает q. Аналогично определяются сравнения p<=q, p>q, p>=q

Пусть p указывает на начало массива. Тогда p+0 равно p, p+1 — это указатель на следующий элемент массива, то есть &p[1], и для любого положительного i p+i — это указатель на p[i].

71. Функции. Объявление функций. Передача массива в качестве параметра.

Функции — одна из самых важных компонентов языка C++.

• Любая функция имеет тип, также, как и любая переменная.

• Функция может возвращать значение, тип которого в большинстве случаев аналогично типу самой функции.

• Если функция не возвращает никакого значения, то она должна иметь тип void (такие функции иногда называют процедурами)

• При объявлении функции, после ее типа должно находиться имя функции и две круглые скобки — открывающая и закрывающая, внутри которых могут находиться один или несколько аргументов функции, которых также может не быть вообще.

• после списка аргументов функции ставится открывающая фигурная скобка, после которой находится само тело функции.

• В конце тела функции обязательно ставится закрывающая фигурная скобка.

Функции очень сильно облегчают работу программисту и намного повышают читаемость и понятность кода, в том числе и для самого разработчика.

Пример построения функции

#include <iostream>

using namespace std;

void function_name ()

{

std::cout << "Hello, world" << std::endl;

}

int main()

{

function_name(); // Вызов функции

return 0;

}

Перед вами тривиальная программа, Hello, world, только реализованная с использованием функций.

Если мы хотим вывести «Hello, world» где-то еще, нам просто нужно вызвать соответствующую функцию. В данном случае это делается так: function_name();. Вызов функции имеет вид имени функции с последующими круглыми скобками. Эти скобки могут быть пустыми, если функция не имеет аргументов. Если же аргументы в самой функции есть, их необходимо указать в круглых скобках.

Когда массив используется в качестве аргумента функции, передается только адрес массива, а не копия всего массива. При вызове функции с именем массива в функцию передается указатель на первый элемент массива. (Надо помнить, что в С имена массивов без индекса - это указатели на первый элемент массива.) Параметр должен иметь тип, совместимый с указателем. Имеется три способа объявления параметра, предназначенного для получения указателя на массив. Важно понять, что при использовании массива в качестве аргумента функции происходит передача в функцию его адреса. Это означает, что код внутри функции действует и может изменять настоящее значение массива, используемого при вызове.