Лекция 3. Динамические массивы (1153710), страница 2
Текст из файла (страница 2)
Операции Си++ для распределения и освобождения памятиДля упрощения работы с динамической памятью в Си++ введеныоперации выделения (new) и освобождения (delete).Самый простой способ использования операция new:указатель=new тип;Указатель должен быть объявлен с помощью тип*.Операция new выделяет ячейку памяти заданного типа и и присваивает значение адреса ячейки указателю. После типа в круглыхскобках можно указать инициализирующее значение, а в квадратных –количество выделяемых ячеек. В большинстве реализаций языкаСи++ одновременно круглые и квадратные скобки не допускаются.Примеры:int *ip = new int; /* создание объекта типа int и получениеуказателя на него */int ip2 = new int(2); /* то же с установкой начальногозначения 2 */double *dblArray = new double [10]; /* распределение памятипод массив из 10 элементов типа double */int **matr = new int [m][n]; /* распределение в памятицелочисленной матрицы из m строк и n столбцов */Операция delete освобождает память, выделенную с помощьюnew.
Вызов delete осуществляется следующим образом:delete указатель;delete [] указатель;//квадратные скобки нужны для массивов8Пример 3. Работа с динамическим одномерным массивом с помощью new и delete.#include <iostream.h>#include <conio.h>void main(){int *a, n, i;cout<<"Input the number of elements\n";cin>>n;a=new int[n];//распред-ие памяти под динамич. массивcout<<"Input elements\n";for (i=0;i<n;i=i+1)cin>>a[i];//*(a+i)for (i=0;i<n;i=i+1)a[i]=a[i]*a[i];cout<<"Squares of elements:\n";for (i=0;i<n;i=i+1)cout<<a[i]<<" ";cout<<endl;_getch();delete [] (a);}Пример 4.
Работа с динамической матрицей с помощью new иdelete.#include <iostream.h>#include <conio.h>void main(){ int **a, n,m, i,j;cout<<"Input n,m\n";cin>>n>>m;a=new int*[n];9cout<<"Input matrix\n";for (i=0;i<n;i=i+1){a[i]=new int[m];for (j=0;j<m;j=j+1)cin>>a[i][j];//*(*(a+i)+j)}for (i=0;i<n;i=i+1)for (j=0;j<m;j=j+1)a[i][j]=2*a[i][j];cout<<"The changed matrix:\n";for (i=0;i<n;i=i+1){ for(j=0;j<m;j=j+1)cout<<a[i][j]<<" ";cout<<endl;delete [] (a[i]);}delete [] a;_getch();}10.