Размещение одномерных массивов в динамической памяти

Если в программе нужно использовать массив, размер которого заранее не известен, то необходимо размещать такой массив в динамической памяти. Для выделения памяти для массива служит операция new:

new имя_ типа[количество_элементов];

Она возвращает указатель на выделенную память.

float *pa;

pa = new float [25];

Теперь по адресу, хранящемуся в pa, можно разместить массив из 25 элементов типа float.

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

delete [] pa; // Освобождение памяти, выделенной для массива

Пример. Вести с клавиатуры размер одномерного массива типа int. Разместить его в области динамического распределения памяти. Присвоить значения его элементам по формуле A[i]=i. Вывести их на экран. Освободить память.

#include <stdio.h>

void main()

{

int i, N, *pi;

printf("N=");

scanf("%d",&N);

pi = new int[N];

for (i=0; i<N; i++)

{

*(pi+i) = i;

printf(" *(pi+%d)=%d \n", i,*(pi+i));

}

delete [] pi;

}

Результат работы программы:

N=5

*(pi+0)=0

*(pi+1)=1

*(pi+2)=2

*(pi+3)=3

*(pi+4)=4

Массивы указателей

Так как указатель это переменная в которой хранится адрес ячейки памяти, то язык С++ позволяет объявить массив указателей:

тип *имя_массива[размер_массива];

Объявим массив указателей из 3 элементов на объекты типа int.

int *array [5];

В таком массиве указателей можно хранить адреса различных целочисленных переменных.

#include <stdio.h>

void main()

{

int *array[3];

int a = 10, b = 20, c = 30;

array[0] = &a;

array[1] = &b;

array[2] = &c;

for (int i = 0; i<3; i++)

printf("%p\n", array[i]);

}

Это не основное применение массивов указателей, которые удобно применять при работе с многомерными массивами.


Занятие 5. Указатели и многомерные массивы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: