Фон
Просто пообщался с парнем C сегодня, и мы не согласились на следующее:
int intgA[2] = { 1, 2 };
int intgB[2] = { 3, 5 };
int *intAPtr = intgA;
int *intBPtr = intgB;
Итак, когда мы делаем:
*intAPtr++ = *intBPtr++;
Мой анализ
Во-первых:
intBPtr
увеличивается на единицу, указывая теперь на адрес 5.
Тогда, уважение, держащее значение 5;
intAPtr
также увеличивается на единицу, теперь указывая на адрес 2.
Впоследствии ссылка и значение равно 2;
Наконец:
2 заменяется на 5.
Итак, соответственно: 5 и 5.
Его анализ
Значение *intBPtr
сначала присваивается *intAPtr
.
Следовательно, они становятся: 3 и 3.
Затем оба *intAPtr
и *intBPtr
увеличиваются на единицу.
Таким образом, соответственно они становятся: 4 и 4.
Мое предположение
Я думал, что оператор ++
имеет приоритет как над *
, так и =
, поэтому мое утверждение.
Например, если бы мы имели:
*intAPtr++;
Результат должен быть 2, верно? Поскольку мы сначала увеличиваем указатель, а затем разыгрываем.
Итак, почему в приведенном выше случае, как он утверждает, мы сначала присваиваем значение intBPtr
значению intAPtr
и увеличиваем значения last?
После того, как вы сделали все предложения, я запустил код в IDE, и результат подтвердил результат @sujin:
Хотя это подтверждает, что я был прав, по крайней мере, с точки зрения приоритета:
То: *intAPtr++ = *intBPtr++;
intAPtr++
имеет более высокий приоритет, что приводит к: intAPtr
увеличивает свой адрес на 1.
Теперь указывая на: адрес 2.
И аналогично:
intBPtr++
также увеличивается на 1 (адрес).
Теперь указывая на: адрес 5.
Затем он *
поворачивается:
Таким образом, оба получают разыменованные (*) соответственно 2 и 5.
Но проблема существует еще потому, что присваивание выше (=
), похоже, не произошло.
Если бы это было так, то получилось бы 5.
Ждем дальнейшего просвещения.