Информатика и технология программирования

       

Работа с массивом указателей


Массив указателей позволяет объединить в общую структуру данных множество переменных одного типа. В этом он имеет сходство с обычным массивом. Разница же между обычным массивом и массивом указателей заключается в том, что в массиве элементы упорядочены физически, их последовательность определяется расположением в памяти. В массиве указателей последовательность элементов задается последовательностью размещения указателей в массиве. Тогда изменение порядка следования (включение, исключение, упорядочение, перестановка), которое в обычном массиве заключается в перемещении самих элементов, в массиве указателей должно сопровождаться соответствующими операциями над последними. Очевидные преимущества возникают, когда сами указуемые переменные являются достаточно большими. В качестве примеров рассмотрим операции удаления и сортировки обычного массива и массива указателей, из которых видна идентичность алгоритмов применительно к разным структурам данных:


//------------------------------------------------------bk52-01.cpp


double extract 1(double d[], int n , int sz )
{ double x; int i;
x = d[n];
for (i=n; i&#60sz; i++)
d[i]=d[i+1];
return x;
}
double sort 1(double d[],int sz)
{ int i,k;
do
{
k = 0;
for (i=0; i&#60sz-1; i++)
if (d[i] &#62 d[i+1])
{ double c; c = d[i];
d[i] = d[i+1]; d[i+1] = c; k=1;}
}
while (k); }


double *extract2(double *pd[] , int n)
{ double *x; int i;
x = pd[n];
for (i=n; pd[i]!=NULL; i++)
pd[i]=pd[i+1];
return x;
}
double sort 2(double *pd[])
{ int i,k;
do
{
k = 0;
for (i=0; pd[i+1]!=NULL;i++)
if (*pd[i] &#62 *pd[i+1])
{double *c; c = pd[i];pd[i] = pd[i+1];
pd[i+1] = c; k = 1; }
}
while (k);
}

При работе с массивом указателей используются две конструкции:



- pd[i] -i-й указатель в массиве;



- *pd[i] -значение указуемой переменной по i-му указателю в массиве.



Содержание раздела