logo

C – вказівник на вказівник (подвійний вказівник)

Необхідна умова: Покажчики на 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