- •Тема 13: Покажчики. Зв'язок покажчика з масивами. Динамічна пам'ять
- •1. Покажчики
- •У змінній p міститься випадкова адреса: 0xNnnnnnnn
- •Void main()
- •2. Способи ініціалізації покажчиків
- •Void main() {
- •Void main()
- •Void main()
- •3. Зв'язок покажчика з одновимірним масивом
- •Void main() {
- •4. Двовимірний масив
- •Void main()
- •5. Динамічна пам'ять
- •Void main()
- •Void main()
- •Void main()
- •Void main() {
Void main()
{ clrscr();
int n,m,i,j;
int *ptr, *mas2; // ptr, mas2 – змінні для адрес (покажчики).
FILE *f;
printf("Введіть число рядків матриці: \n");
scanf("%d",&n);
printf("\nВведите число стовпців матриці: \n");
scanf("%d",&m);
mas2 = new int[n*m]; // Виділяємо блок пам'яті під елементи
//матриці. Початкова адреса виділеного блоку пам'яті
// розміщується в змінній mas2.
// Введення матриці з файлу.
f = fopen("t.dat", "r");
ptr = mas2; // Початкову адресу виділеного блоку засилаємо в ptr. for(i = 0; i < n; i++) for (j = 0; j < m; j++, ptr++)
fscanf(f,"%d",ptr); // Форма доступу до елементів матриці.
fclose(f);
ptr = mas2; // Питання: для чого потрібний цей код програми?
for(i = 0; i < n; i++)
{ for (j = 0; j < m; j++)
{ ptr = mas2 + i * m + j; // Визначаєм адреса елементу з індексами i, j.
printf(" %d", *ptr); // Виведення елементу матриці з індексами i, j. }
printf("\n"); }
printf("Введіть номер рядка матриці i = ");
scanf("%d",&i);
i--; // Індекс рядка на 1 менше номера.
printf("Введіть номер стовпця матриці j = ");
scanf("%d",&j);
j--; // Індекс стовпця на 1 менше номера.
ptr = mas2 +i * m + j; // Визначаєм адресу елементу з індексами i, j.
printf(" а[%d,%d]= %d",i,j,*ptr); // Виводиться на екран елемент ptr[i][j].
getch(); }
Програма 14. Виділяється динамічна пам'ять під матрицю з використанням масиву покажчиків.
Void main() {
int n,m,i,j;
int **mas2; // mas2 – покажчик для адрес покажчиків.
FILE *f;
clrscr();
printf("Введіть число рядків матриці: \n");
scanf("%d",&n);
printf("\nВведите число стовпців матриці: \n");
scanf("%d",&m);
mas2 = new int *[n]; // Виділяємо блок пам'яті під масив покажчиків.
for(i = 0; i < n; i++)
mas2[i]= new int [m]; // Виділяємо блок пам'яті під рядок матриці.
f = fopen("t.dat", "r");
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
fscanf(f,“%d” &mas2[i][j]); // Введення елементів матриці з файлу.
fclose(f);
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
printf(" %d", mas2[i][j]); // Виведення елементів матриці на екран.
printf("\n");
}
delete [] mas2;
getch(); }
Контрольні питання: