- •Покажчик – це змінна для адреси елементу пам'яті. Загальний формат оголошення покажчика має
- •Програма 1. Оголошує покажчик. Видає випадкову інформацію з області пам'яті, яка виділяється під
- •Перша область відводиться під покажчик. Ця область пам'яті має ім'я р. Друга область
- •Програма 2. Оголошує покажчик. Видає інформацію з областей пам'яті p і *p, які
- •Покажчику можна привласнити адресу однотипної змінної, яка оголошена в програмі. Наприклад, після виконання
- •У покажчик можна вводити інформацію з клавіатури, використовуючи директиву введення формату scanf() із
- •Схема пам'яті після оголошення змінних дана на мал. 2.
- •Програма 4. Оголошує покажчик. Для ініціалізації покажчика використовується директива new.
- •Розберемо роботу програми. Схема пам'яті після оголошення змінних дана на мал. 4.
- •Програма 5. Оголошує покажчик. Адреса в покажчик вводиться з клавіатури директивою scanf, в
- •Дана програма спочатку видасть адресу змінної x у форматі процесора. Потім в цьому
- •Покажчик на покажчик – це змінна для адреси покажчика.
- •Тут AY, A, N – випадкові числа у відповідних областях пам'яті. Області з
- •Програма 6. Оголошує покажчик на покажчик. Видає інформацію з областей пам'яті, які
- •Відмітимо, що якщо змінна p визначається, наприклад, кодом int **p, то при виконанні
- •Дана програма показує, що значення в змінній а і адреса першого елементу масиву
- •Програма 8. Програма демонструє способи доступу до елементів масиву через адреси, обчислює суму
- •Якщо задана матриця, наприклад а[n][m], то для неї визначений масив покажчиків а[n]. У
- •Програма 9. Демонструє, що при оголошенні двовимірного масиву, визначений масив покажчиків на перші
- •void main(void)
- •fclose(f1);
- •Під динамічною пам'яттю розуміється пам'ять, яка виділяється під час роботи програми. У мові
- •пам'яті під одновимірний масив.
- •Програма 12. Програма демонструє той факт, що при оголошенні покажчика в програмі можна
- •Програма 13. Для виділення динамічній пам'яті під матрицю
- •Програма 14. Виділяється динамічна пам'ять під матрицю з використанням масиву покажчиків.
Програма 12. Програма демонструє той факт, що при оголошенні покажчика в програмі можна використовувати змінну з індексом без попереднього виділення динамічній пам'яті.
void main() { int j,s;
int *data;
clrscr();
cout << “В змінній data значення адреси = ” << data << “\n”; cout << "Введи розмір масиву ";
cin >> s;
cout << "\nРазмер массива= “<< s << "\n\n Введи масив з клавиатуры\n“; // Динамічну пам'ять НЕ ВИДІЛЯЄМО!
for (j = 0; j < s; j++)
{
cout << "data[" << j << "]= " ;
cin >> data [j]; // Доступ до елементів масиву через індекс.
}
cout << "\nВведен масив: \n"; for (j = 0; j < s; j++)
cout << data[j] << “ “; cout << "\n"; getch(); }
Програма 13. Для виділення динамічній пам'яті під матрицю
використовується покажчик.
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(); }