C – вказівник на вказівник (подвійний вказівник)
Необхідна умова: Покажчики на C
Покажчик на вказівник у C використовується, коли ми хочемо зберегти адресу іншого вказівника. Перший покажчик використовується для зберігання адреси змінної. А другий покажчик використовується для зберігання адреси першого покажчика. Ось чому вони також відомі як подвійні покажчики . Ми можемо використовувати вказівник на вказівник, щоб змінити значення звичайних покажчиків або створити двовимірний масив змінного розміру. Подвійний вказівник займає стільки ж місця в стеку пам’яті, скільки звичайний вказівник.
Оголошення покажчика на покажчик у C
Оголошення вказівника на вказівник подібне до оголошення вказівника в C. Різниця полягає в тому, що ми повинні поставити додатковий «*» перед назвою вказівника.
data_type_of_pointer **name_of_variable = & normal_pointer_variable;
int val = 5; int *ptr = &val; // storing address of val to pointer ptr. int **d_ptr = &ptr; // pointer to a pointer declared // which is pointing to an integer.
Наведена вище діаграма показує представлення вказівника на вказівник у пам’яті. Перший покажчик ptr1 зберігає адресу змінної, а другий покажчик ptr2 зберігає адресу першого покажчика.
Приклад подвійного покажчика в C
C
// C program to demonstrate pointer to pointer> #include> int> main()> {> > int> var = 789;> > // pointer for var> > int> * ptr2;> > // double pointer for ptr2> > int> ** ptr1;> > // storing address of var in ptr2> > ptr2 = &var;> > // Storing address of ptr2 in ptr1> > ptr1 = &ptr2;> > // Displaying value of var using> > // both single and double pointers> > printf> (> 'Value of var = %d
'> , var);> > printf> (> 'Value of var using single pointer = %d
'> , *ptr2);> > printf> (> 'Value of var using double pointer = %d
'> , **ptr1);> > return> 0;> }> |
Вихід
Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789
Як працює подвійний покажчик?
Роботу подвійного вказівника можна пояснити за допомогою зображення вище:
- Подвійний покажчик оголошується за допомогою синтаксису, показаного вище.
- Після цього ми зберігаємо адресу іншого вказівника як значення цього нового подвійного вказівника.
- Тепер, якщо ми хочемо маніпулювати або розіменовувати будь-який з його рівнів, ми повинні використовувати оператор Asterisk ( * ) стільки разів, скільки разів ми хочемо перейти нижче рівня.
Розмір вказівника на вказівник у C
У мові програмування C подвійний вказівник поводиться подібно до звичайного вказівника в C. Отже, розмір змінної подвійного вказівника завжди дорівнює розміру звичайних вказівників. Ми можемо перевірити це за допомогою наведеної нижче програми C.
Приклад 1: програма C для визначення розміру вказівника на вказівник.
C
// C program to find the size of pointer to pointer> #include> int> main()> {> > // defining single and double pointers> > int> a = 5;> > int> * ptr = &a;> > int> ** d_ptr = &ptr;> > // size of single pointer> > printf> (> ' Size of normal Pointer: %d
'> ,> sizeof> (ptr));> > // size of double pointer> > printf> (> ' Size of Double Pointer: %d
'> ,> sizeof> (d_ptr));> > return> 0;> }> |
Вихід
Size of normal Pointer: 8 Size of Double Pointer: 8
Примітка: Результат наведеного вище коду також залежить від типу машини, яка використовується. Розмір вказівника не є фіксованим у мові програмування C і залежить від інших факторів, таких як архітектура центрального процесора та використовувана ОС. Зазвичай для 64-розрядної операційної системи розмір становитиме 8 байт, а для 32-розрядної операційної системи – 4 байти.
Застосування подвійних покажчиків у C
Нижче наведено основні способи використання покажчика на покажчик у C:
- Вони використовуються в динамічному розподілі пам'яті багатовимірних масивів.
- Їх можна використовувати для зберігання багаторівневих даних, таких як абзац текстового документа, речення та семантика слів.
- Вони використовуються в структурах даних для безпосереднього керування адресами вузлів без копіювання.
- Їх можна використовувати як аргументи функції для маніпулювання адресою, що зберігається в локальному покажчику.
Багаторівневі покажчики в C
Подвійні покажчики — не єдині багаторівневі покажчики, які підтримуються мовою C. Що, якщо ми хочемо змінити значення подвійного покажчика?
У цьому випадку ми можемо використовувати потрійний вказівник, який буде вказівником на вказівник на вказівник, тобто int ***t_ptr.
Синтаксис потрійного покажчика
pointer_type *** pointer_name;
Подібним чином, щоб змінити значення потрійного вказівника, ми можемо використовувати вказівник на вказівник на вказівник на вказівник (Покажчик чотирьох рівнів). Іншими словами, можна сказати, що для зміни значення змінної рівня x ми можемо використовувати покажчик рівня x+1. І цю концепцію можна розширити.
Примітка : Ми можемо використовувати будь-який покажчик рівня в C. Це не має обмежень, але це робить програму дуже складною та вразливою до помилок.
Потрібно прочитати – Покажчик на функцію в C