Если вы действительно имеете в виду «вернуть пункт назначения указателя в качестве ссылки», то я думаю, что тип возвращаемого вами значения - int&
вместо int*
.
Это может быть одной из запутанных вещей в C ++, поскольку &
и *
имеют разные значения в зависимости от того, где вы их используете. &
- это «Тип ссылки», если вы говорите об определении переменной или типе возврата; но это означает «Адрес», если он находится перед переменной, используемой после ее определения.
Я могу быть совершенно ошибочным, но мне кажется, что вы перепутали эти два значения; и так как вы хотите вернуть ссылку, вы написали «return &i
», так как &
используется для ссылок. Однако в этом случае он возвращает адрес из i
. А поскольку i
является указателем на указатель на int, в этой строке кода:
int* increment(int** i) { i++; return &i;}
вы возвращаете адрес указателя на указатель на int
. Вот почему вы получаете сообщение об ошибке cannot convert int***' to int*
.
Давайте пройдемся по вашему коду построчно. Вы ищите программу, которая берет указатель и возвращает ссылку. Так что это будет:
int& increment(int* i)
Нам не нужен двойной указатель, который был у вас в коде (если вы не хотите указатель на указатель). Затем вы хотите изменить то, на что указывает указатель:
(*i)++;
А затем вернуть указатель назначения в качестве ссылки:
return *i;
Здесь мы разыменовываем i
. Помните, что использование ссылок позволяет вам обращаться с ними как с обычными переменными и обрабатывает указатель для вас. Таким образом, C ++ выяснит, что вы хотите, чтобы он был ссылкой.
Затем, чтобы использовать свой код, вы можете делать в значительной степени то, что имели, но используя меньше указателей:
int a=24;
int *p=&a;
int *p2;
p2 = increment(p);
Я не проверял ничего из этого, поэтому любой может смело редактировать мой ответ и исправлять его, если у меня что-то не так.