Почему составные присваивания или итеративные операторы не работают с разыменованными указателями - PullRequest
0 голосов
/ 28 февраля 2019

Если я хочу увеличить указатель, который ссылается на местоположение int, я не могу использовать эти методы:

 *Pntr +=1;
 *Pntr++;

Однако использование этого метода работает без проблем:

 *Pntr = *Pntr + 1;

То, что происходит, заставляет эти сокращенные методы не работать.(Также должен указать, что я использую Visual Studio, и иногда он действует странно, поэтому я должен упомянуть об этом)

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Если я хочу увеличить указатель , который ссылается на местоположение целого ... [выделение добавлено]

Примечаниечто при увеличении указателя он увеличивается с шагом в размере объекта, на который может указывать указатель .

Поскольку вы упомянули -

, используяэтот метод работает без проблем:

*Pntr = *Pntr + 1;

Итак, похоже, что вы хотите увеличить значение в местоположении, на которое указывает Pntr, на 1.

Приоритет оператора postfix ++ выше, чем унарного оператора * (проверьте приоритет оператора таблица).Таким образом, выражение

*Pntr++;

будет оцениваться как

*(Pntr++);

, которое будет перемещать указатель Pntr на размер int и затем разыменовывать его.
Для увеличениязначение указателя вы можете сделать:

(*Pntr)++;

Вы также можете использовать префикс оператора ++:

++*Pntr;

Выражение

*Pntr +=1;

являетсятак же, как

*Pntr = *Pntr + 1;

, и оба увеличат значение в месте, указанном на Pntr на 1.

0 голосов
/ 28 февраля 2019
*Pntr +=1;

Это увеличивает значение, на которое указывает указатель.

*Pntr++;

Это то же самое, что и:

*(Pntr++);

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

 *Pntr = *Pntr + 1;

Это, как и первая строка, увеличивает значение, на которое указывает указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...