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

         

Многоуровневые массивы указателей на строки


Для массива указателей на строки типа char*[] существует аналог -двойной указатель типа char**, который можно интерпретировать как указатель на массив указателей на строки. При этом типы char*[] и char** соотносятся как указатель-константа и указатель-переменная(см п.4.1). Двойной указатель может использоваться для работы с динамическими массивами строк. В последнем случае как сами строки, так и массив указателей на них представлены динамическими переменными. В качестве примера рассмотрим создание массива указателей на строки при чтении последних из файла.


//------------------------------------------------------bk52-04.cpp


&#35define SIZE0 100
char **loadfile(FILE *fd)
{
char **pp,*q,str[80];
int i;
pp = new char* [SIZE0]; // Создать динамический


if (pp ==NULL) return(NULL); // массив указателей


for (i=0; fgets(str,80,fd) !=NULL; i++)
{ // Читать строку из файла


q = new char [strlen(str)+1];
if (q==NULL) return(NULL); // Создать динамический


strcpy(q,str); // массив символов и


// копировать туда строку.


pp[i] = q; // Сохранить указатель


if ((i+1) % SIZE0 ==0) // Расширить массив указа-


{ // телей при переполнении


pp = realloc(pp,sizeof(char *) *(i+1+SIZE0));
if (pp ==NULL) return(NULL);
}
}
pp[i] = NULL; // Ограничитель массива


return pp; // указателей


}

Определенный смысл имеют и конструкции вида:


char **pp[20]; char ***ppp;

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



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