2010-08-15 3 views
3

Я использую c-указатели, в которых, если я увеличиваю как * p ++, он увеличивает p, но возвращает только значение, указанное p, до того, как оно было увеличено. как я могу увеличить значение, указанное p.incrementing c pointers

+0

Это на самом деле прямой вопрос C, поэтому я добавил тег. – JeremyP

ответ

4

постфикс++ имеет более высокий приоритет, чем *, компилятор читает *p++, как *(p++). Так как вы хотите увеличить значение *p, вам нужны скобки: (*p)++ вернет значение *p и затем увеличит значение p на единицу. ++(*p) увеличит значение *p и вернет это значение.

Можно опустить фигурные скобки для последнего случая и писать ++*p, но я бы посоветовал не делать этого, потому что ++(*p) является двойственной к (*p)++, но ++*p не *p++.

+0

-1 Как это получилось? В вопросе задается вопрос о том, как увеличить значение, на которое указывает p, а не как увеличить p, а затем получить значение, на которое указывает новый p. – JeremyP

+0

-1. Neeraj спрашивает: «Как я могу увеличить значение, указанное p». Это увеличивает указатель 'p', а затем удаляет его, чтобы получить значение, на которое указывает' p'. – Stephen

+0

Ooops. Это было неправильно прочитано мной. Я думаю, что мои сторонники сделали то же самое :-). Я исправляю это. –

6

сделать это: (* р) ++

Используя скобку, вы указали, вы имеете в виду, чтобы увеличить значение указал на.

+0

Если вам не нужно значение и как вырезать ненужную скобку '++ * p', также следует работать. –

+0

+1. Я не понимаю, почему другие ответы проголосовали или, по крайней мере, не проголосовали. Ответ Яна является единственным правильным здесь. Ответчик вопроса хочет увеличить значение, которое p ** указывает ** at, а не значение p. – Stephen

+0

@Stephen - это вопрос немного амбициоза, «он увеличивает p», как будто он пытался увеличить указатель. На перечитывании я думаю, что это правильный ответ, хотя – cobbal