unclechu
@unclechu

"C": инкремент и указатель?

Столкнулся с ошибкой, которую долго отлаживал. Хотелось бы прояснить для себя.

Кто-нибудь может объяснить, в чём разница между этими двумя строчками?
(*i)++;
*i++;

UPD
Контекст:
int32_t i = 0;
void inc(int32_t *i) { (*i)++; }
void main() { inc(&i); }
  • Вопрос задан
  • 6519 просмотров
Решения вопроса 1
Первый вариант инкрементирует значение, на которое указывает указатель, а второй вариант инкрементирует сам указатель.

UPD. Просто добавь в свой main вызов printf(PRId32 "\n", i) и увидишь разницу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@lookid
Ни в чем. Разыменование указателя всегда будет выполняться перед ++
Ответ написан
@Fil
Немного дополню. Постинкремент действительно имеет более высокий приоритет, поэтому в *p++ сначала выполнится именно ++. Но эта операция хитрая и не эквивалентна +=1. Для реализации сходной логики в своих классах (C++) делают примерно так:
A::operator++(int) { //Постфиксный 
  A temp(*this);
  *this+=1;
  return temp;
}

То есть, возвращается копия, над которой производятся дальнейшие операции в выражении, хотя сам объект уже увеличен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы