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

       

Формирование массивов указателей


Массивы указателей как и все остальные структуры данных, содержащие указатели, допускают различные способы формирования, которые отличаются как способом создания самих элементов, так и способом установления связей между ними:



-указуемые элементы (переменные) могут быть как обычными (статическими) переменными, создаваемые транслятором, так и динамическими переменными, создаваемыми в процессе работы программы;



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

В результате получаются структуры данных, единственное различие которых заключается во времени их формирования: от момента трансляции (инициализация) до момента выполнения.

Вариант 1. Формирование структуры данных при трансляции: переменные определяются статически, а указатели инициализируются. Такие структуры данных включены непосредственно в программный код и "готовы к работе":


double a1,a2,a3, *pd[] = { &#38a1, &#38a2, &#38a3, NULL};

Вариант 2. Переменные определяются статически, указатели устанавливаются программно. Этот вариант наиболее часто используется, когда указуемые переменные представлены массивом:


double d[19], *pd[20];
for (i=0; i&#60 19; i++) pd[i] = &#38d[i];
pd[i] = NULL;

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

Вариант 3. Указуемые переменные создаются динамически, массив указателей -статически:


double *p, *pd[20];
for (i=0; i&#60 19; i++)
{
p = new double; *p = i; pd[i] = p;
}
pd[i] = NULL;

Вариант 4. Все переменные, в том числе и массив указателей, создаются динамически. Результатом работы является указатель на создаваемый массив указателей (адрес массива указателей) (см. ниже " динамические массивы указателей " ):


double **pp, *p;
pp = new double *[20]; // память под массив


for (i=0; i&#60 19; i++) // из 20 указателей типа double*


{
p = new double;
*p = i; pp[i] = p;
}
pp[i] = NULL;



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