Вы не можете.Вы должны сохранить исходную позицию:
const char *o = txt;
// do work
txt = o;
или использовать индекс:
size_t i = 0;
// instead of txt++ it's i++
// and instead of *txt it's txt[i]
i = 0;
Ваша попытка:
txt = &(*txt[0]);
Неправильно, если вы смотритена него.Сначала требуется txt[0]
(который имеет тип char
), затем пытается разыменовать его с помощью *
, а затем принимает этот адрес с помощью оператора &
(теоретически получая исходный результат, хотя я бы не сталЯ хочу слишком серьезно подумать о том, работает ли это для разыменования арифметических типов, таких как char
), а затем назначить этот (арифметический) результат указателю.Как будто вы говорите:
const char *txt = 'a';
Это не имеет смысла.Вероятно, вы просто искали
txt = &txt[0];
, который, на первый взгляд, может показаться, что он устанавливает txt
для указания на первый элемент txt
, но имейте в виду, что txt[0]
просто *(txt + 0)
или *txt
.И &*txt
упрощается до txt
, так что вы фактически делаете:
txt = txt;
Или ничего.Вы получаете тот же указатель.Используйте один из двух методов, которые я описал.