C — указатель на указатель (двойной указатель)

Опубликовано: 11 Января, 2023

Предварительное условие: указатели в 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. Таким образом, размер переменной с двойным указателем и размер переменной с обычным указателем всегда равны.

Примечание. Вывод приведенного выше кода также зависит от типа используемой машины. Размер указателя не фиксирован в языке программирования C и полностью зависит от других факторов, таких как архитектура ЦП и используемая ОС. Обычно для 64-разрядной операционной системы размер составляет 8 байт, а для 32-разрядной операционной системы размер составляет 4 байта.

Что если мы захотим изменить значение двойного указателя?

В этом случае мы можем использовать тройной указатель, который будет указателем на указатель на указатель, т.е. int ***t_ptr. И аналогично, чтобы изменить значение тройного указателя, мы можем использовать указатель на указатель на указатель на указатель. Другими словами, мы можем сказать, что для изменения значения переменной «уровень — х» мы можем использовать указатель «уровень — х+1». И это понятие может быть расширено дальше.

Обязателен к прочтению — указатель на функцию в C

Эта статья предоставлена Харшем Агарвалом . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью, используя write.geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или если вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.

C