Когда p
имеет тип int **
,
++**p
увеличивает значение типа int, представленного **p
.
, чтобы изменить адрес объекта int указывает на то, что вы будете использовать
++*p
При прямом доступе к вашей переменной вы будете использовать на один *
меньше для всего:
int *p;
++*p; // increment the int value
++p; // increment the pointer
Но внутри такой функции каждый аргумент это просто копия, поэтому если вы хотите что-то изменить снаружи, вам нужен указатель на это, что означает, что для всего используется еще один *
.
function f(int **p) {
++**p; // increment the int value
++*p; // increment the pointer
// you can also increment the argument
// but you can't know whether it will then
// still point to another int pointer:
++p
}
Кроме того, вы можете использовать & вместо * в C ++, который используется только для объявления переменной в качестве ссылки, а затем работает как секретный, скрытый указатель. Вы снова используете на единицу меньше *
, как вначале вне функции.
function f(int *&p) {
++*p; // increment the int value
++p; // increment the pointer
// you can also not increment the reference itself,
// as it is a hidden pointer.
}
Это звучит опасно, потому что кому нужны секретные указатели? Но это очень распространено в C ++, потому что людям нравится печатать меньше *
повсюду.