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