Цель работы: Научиться использовать указатель на указатель при работе с двухмерными массивами.
Теоретические сведения
Можно объявлять переменные, имеющие тип «указатель на указатель».
Например: int **mas;
Указатель на указатель – это адрес ячейки, хранящий адрес указателя. При определении указатель на указатель можно инициализировать.
Например:
int mm=10; // переменная типа int
int *ptr=&mm; // указатель на переменную типа int
int **pptr=&ptr; // указатель на указатель
Для доступа к переменной mm теперь можно использовать операции взятия по адресу и индексы: ptr[0], *ptr, pptr[0][0], **pptr.
Выделить память под двухмерный массив используя указатель на указатель можно следующим образом:
int **ptr;
int n; // количество строк
int m; // количество столбцов
printf(“\n Введите количество строк и столбцов\n”);
scanf(“%d%d”,&n,&m);
ptr=(int **)calloc(n,sizeof(int *));
for(int i=0; i < n; i++)
ptr[i]=(int *)calloc(m,sizeof(int));
printf(“\n Введите элементы массива\n”);
for(int i=0; i < n; i++)
for(int j=0; j < m; j++)
scanf(“%d”,(ptr+i)+j);
printf(“\n Исходный массив\n”);
for(int i=0; i < n; i++)
{
printf(“\n”);
for(int j=0; j < m; j++)
printf(“%4d”,ptr[i][j]);
}