Я думаю, что вас смущает:
**a++
анализируется как **(a++)
, а
**a += n
анализируется как (**a) += n
Это связано с приоритет оператора
Мой совет - всегда использовать круглые скобки в подобных случаях, чтобы избежать путаницы.
Теперь перейдем к каждому случаю:
Случай 1
a++
Арифметика указателей.Пост-приращения a
Случай 2
**a++
анализируется как **(a++)
- это отправка приращений
a
- Арифметика указателей - результат вычисления
(a++)
равен a
- значение до приращения - , тогда у вас есть двойное косвенное указание.
Таким образом, приведенное выше эквивалентно (больше илименьше) со следующим:
**a;
a = a + 1;
Случай 3
a += n
Арифметика указателя.Я ожидал бы самоочевидного.
Случай 4
**a += n
Это анализируется как
(**a) += n
Таким образом, вы делаете двойное перенаправление на a
, получая значениеуказанного целого числа, а затем вы увеличиваете это целое число (целочисленная арифметика).