Say у вас есть следующий код:
int *p;
int **p2;
int k;
затем мы можем инициализировать k
и сделать p
точку к нему. После этого мы можем позволить p2
точку на указательp
:
k = 10;
p = &i;
p2 = &p;
Мы теперь разыменовать p2
дважды, чтобы увидеть, какое значение указатель p2
указывает на указывают на (с использованием простой C++):
#include <iostream>
...
std::cout << "What is k? Answer: " << **p2;
-> Что такое k? Ответ: 10
Также можно изменить значение k
разыменовывая это
**p2 = 19;
std::cout << "What is k now? Answer: " << **p2;
-> Что такое к сейчас? Ответ: 19
Надеюсь, это поможет новым программистам получить представление о том, как указатели на указатели могут быть разыменованы. Если тройной (или более) указатели хотели, просто разыменования более уровней
int ***p3 = &p2;
***p3 = 60;
std::cout << "What is k now? Answer: " << ***p3;
-> Что такое к сейчас? Ответ: 60
Более подробная информация о том, что на самом деле разыменовании средства можно найти в
What does "dereferencing" a pointer mean?
Целью было дать понятное объяснение кода чтения, содержащего многоуровневые указатели.Не обязательно то, что вы разработали сами - (поскольку вы должны знать, что такое многоуровневый указатель, прежде чем вы сможете использовать его самостоятельно). – TomBombadil
И я бы все же утверждал, что это не нужно. Учитывая информацию, что '*' разделяет указатель (вместе с тем, что означает * разыменование *), и что указатели могут указывать на другие указатели, любой, кто не способен вывести его, может просто написать '**', не квалифицируется как программист. Но это только мое мнение ... –
Это, безусловно, мнение против мнения, но мой опыт заключается в том, что некоторые новые программисты (которые, как я знаю, часто используют этот сайт) испытывают трудности с пониманием концепции указателей, и это не так редко, что вы спотыкаться о многоуровневых указателях, когда вы изучаете программирование. – TomBombadil