Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Динамические массивы



Правила создания и уничтожения динамических переменных типов int, char, double и т.п. распространяются и на динамические массивы. По отношению к массивам динамическое распределение памяти особенно полезно, поскольку иногда бывают массивы больших размеров.

Динамический массив из 10-ти целых чисел можно создать следующим образом:

int *ptr; // объявление указателя

ptr = new int[10]; // создание массива из 10 элементов

Переменные-массивы в Си++ являются указателями, поэтому к 10-ти элементам динамического массива допускается обращение:

ptr[0] ptr[1]... ptr[9]

или:

*ptr *(ptr + 1)... *(ptr + 9)

Для уничтожения динамического массива применяется оператор delete c квадратными скобками [], например:

delete[] ptr;

Скобки [] играют важную роль. Они сообщают оператору, что требуется уничтожить все элементы массива, а не только первый.

Работа с динамическими массивами показана в программе. В приведенной программе у пользователя запрашивается список целых чисел, затем вычисляется и выводится на экран их среднее значение.

#include <stdio.h>

#include <stdlib.h>

#include <stddef.h>

void main()

{

int kol, S=0, *ptr;

printf("Введите количество целых чисел в списке:\n");

scanf("%d", &kol);

ptr = new int[kol]; // выделение памяти

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

{

printf("Извините, недостаточно оперативной памяти.\n");

exit(1);

}

printf("Введите %d целых чисел:\n", kol);

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

{

scanf("%d", ptr+i);

S=S+ptr[i]; // или S=S+*(ptr+i);

}

printf("Среднее значение: %f\n", 1.0*S/kol);

delete[] ptr; // освобождение памяти

}

Пример. Дан массив целых чисел из k элементов. Удалить из массива все нулевые элементы.

#include <stdio.h>

#include <stdlib.h>

#include <stddef.h>

void main()

{

int *ptr_a, *ptr_b;

int k1,k2,i,j;

printf("Введите количество элементов в массиве:\n");

scanf("%d", &k1);

ptr_a = new int[k1];

if (ptr_a==NULL)

{

printf("Извините, недостаточно оперативной памяти.\n");

exit(1);

}

printf("Введите %d целых чисел:\n", k1);

k2=k1;

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

{

scanf("%d", ptr_a+i);

if (ptr_a[i]==0) k2--;

}

ptr_b = new int[k2];

if (ptr_b==NULL)

{

printf("Извините, недостаточно оперативной памяти.\n");

exit(1);

}

j=0;

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

if (*(ptr_a+i)!=0) { *(ptr_b+j)=*(ptr_a+i); j++; }

for (j=0; j<k2; j++)

printf(" %d", *(ptr_b+j));

delete[] ptr_a;

}

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

#include <stdio.h>

#include <stdlib.h>

#include <stddef.h>

void main()

{

int *ptr_a, *ptr_b;

int k1,k2,i,j;

printf("Введите количество элементов в массиве:\n");

scanf("%d", &k1);

ptr_a = new int[k1];

if (ptr_a==NULL)

{

printf("Извините, недостаточно оперативной памяти.\n");

exit(1);

}

printf("Введите %d целых чисел:\n", k1);

k2=k1;

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

{

scanf("%d", ptr_a+i);

if (ptr_a[i]==0) k2++;

}

ptr_b = new int[k2];

if (ptr_b==NULL)

{

printf("Извините, недостаточно оперативной памяти.\n");

exit(1);

}

j=0;

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

{

*(ptr_b+j)=*(ptr_a+i);

j++;

if (*(ptr_a+i)==0) { *(ptr_b+j)=1; j++; }

}

for (j=0; j<k2; j++)

printf(" %d", *(ptr_b+j));

delete[] ptr_a;

}





Дата публикования: 2015-01-23; Прочитано: 243 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...