Программирование на языке C


Динамическое размещение массивов


При динамическом распределении памяти для массивов следует описать соответствующий указатель и присваивать ему значение при помощи функции calloc. Одномерный массив a[10] из элементов типа float можно создать следующим образом

float *a; a=(float*)(calloc(10,sizeof(float));

Для создания двумерного массива вначале нужно распределить память для массива указателей на одномерные массивы, а затем распределять память для одномерных массивов. Пусть, например, требуется создать массив a[n][m], это можно сделать при помощи следующего фрагмента программы:

#include

main () { double **a; int n,m,i; scanf("%d %d",&n,&m); a=(double **)calloc(m,sizeof(double *)); for (i=0; i

Аналогичным образом можно распределить память и для трехмерного массива размером n,m,l. Следует только помнить, что ненужную для дальнейшего выполнения программы память следует освобождать при помощи функции free.

#include

main () { long ***a; int n,m,l,i,j; scanf("%d %d %d",&n,&m,&l); /* -------- распределение памяти -------- */ a=(long ***)calloc(m,sizeof(long **)); for (i=0; i

Рассмотрим еще один интересный пример, в котором память для массивов распределяется в вызываемой функции, а используется в вызывающей. В таком случае в вызываемую функцию требуется передавать указатели, которым будут присвоены адреса выделяемой для массивов памяти.

Пример: #include

main() { int vvod(double ***, long **); double **a; /* указатель для массива a[n][m] */ long *b; /* указатель для массива b[n] */ vvod (&a,&b); .. /* в функцию vvod передаются адреса указателей, */ .. /* а не их значения */ .. } int vvod(double ***a, long **b) { int n,m,i,j; scanf (" %d %d ",&n,&m); *a=(double **)calloc(n,sizeof(double *)); *b=(long *)calloc(n,sizeof(long)); for (i=0; i

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

Пример:




Начало  Назад  Вперед



Книжный магазин