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. Таким образом, размер переменной с двойным указателем и размер переменной с обычным указателем всегда равны.
Примечание. Вывод приведенного выше кода также зависит от типа используемой машины. Размер указателя не фиксирован в языке программирования C и полностью зависит от других факторов, таких как архитектура ЦП и используемая ОС. Обычно для 64-разрядной операционной системы размер составляет 8 байт, а для 32-разрядной операционной системы размер составляет 4 байта.
Что если мы захотим изменить значение двойного указателя?
В этом случае мы можем использовать тройной указатель, который будет указателем на указатель на указатель, т.е. int ***t_ptr. И аналогично, чтобы изменить значение тройного указателя, мы можем использовать указатель на указатель на указатель на указатель. Другими словами, мы можем сказать, что для изменения значения переменной «уровень — х» мы можем использовать указатель «уровень — х+1». И это понятие может быть расширено дальше.
Обязателен к прочтению — указатель на функцию в C
Эта статья предоставлена Харшем Агарвалом . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью, используя write.geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или если вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.