Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Правила создания и уничтожения динамических переменных типов 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!