#include <iostream>
using namespace std;
int main (int argc, char *argv[])
{
int numbers[] = { 100, 200, 300, 400, 500, 600 };
int *p1 = &numbers[0];
int *p2 = &numbers[2];
int *p3 = &numbers[4];
*p1 = *p1 + 1;
*p2 = *p2++;
++*p3;
cout << numbers[0] << " " << numbers[1] << " " << numbers[2] << " " << numbers[3] << " " << numbers[4] << " " << numbers[5];
}
Запуск этого через XCode дает мне подсказку относительно того, что идет не так, как говорится: «temp / test.cxx: 11: 12: предупреждение: непоследовательная модификация и доступ к 'p2' [-Wunsequenced]».
Вывод 101 200 300 300 501 600
.
Первый метод работает, как вы сказали в своем вопросе.
Второй делает что-то совершенно отличное от того, что вы ожидали: этопринимает значение, на которое указывает p2 (300), затем увеличивает указатель и сохраняет значение обратно на этот новый адрес.
Третий пример с p3 ближе к тому, чего вы пытаетесь достичь, я думаю.