Я вижу две вещи неправильно с кодом. Один из них:
int *ip = x;
Это попытка присвоить значение int указателю. Это может быть принудительно с помощью флагов компилятора, но должно дать ошибку. Тем не менее, я подозреваю, что это может быть опечаткой в вашем вопросе, так как разыменование адреса 2 должно почти наверняка сбой, но вы утверждали, что он побежал и произвел результат 2. Я собираюсь предположить, что вы на самом деле:
int *ip = &x;
Вторая проблема:
ip++;
Здесь вы увеличивающиеся указатель, а не INT он указывает. Я думаю, что вы хотели (для увеличения от 2 до 3) будет:
(*ip)++;
То есть, увеличить значение точки указателя на.
Если вы увеличиваете указатель, он теперь укажет на другое место в вашем стеке, которое может быть другой локальной переменной (например, сам указатель) или обратным адресом или указателем фрейма стека или другим скрытым значением , Существует хорошая вероятность, что новое значение будет своего рода указателем, значение которого аналогично адресу вашего указателя или иначе будет выглядеть как вывод печати указателя. Естественно, вы не должны увеличивать указатель, указывающий на один элемент. Это никогда не будет хорошей идеей.
Включите все предупреждения компилятора и посмотрите, полезно ли это. –
Возможно, вы имели в виду '(* ip) ++'? Я предполагаю, что вы хотите увеличить «x» с помощью указателя, а не увеличивать указатель. –
int * ip = x на самом деле означает, объявляет ip как указатель на int и присваивает значения x (который является как int) для ip (который является указателем на int) –