Фон
Только что сегодня разговаривал с парнем 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
и увеличиваем значения в последнюю очередь?
Приняв во внимание все предложения, я запустил код в среде IDE, и результат подтвердил результат @sujin:
Хотя это подтверждает, что я был прав хотя бы в плане приоритета:
Это: *intAPtr++ = *intBPtr++;
intAPtr++
имеет более высокий приоритет, что приводит к: intAPtr
увеличивает свой адрес на 1.
Теперь указывая на: адрес 2.
А так же:
intBPtr++
также увеличивается на 1 (адрес).
Теперь указывая на: адрес 5.
Затем наступает очередь *
:
Таким образом, оба разыменовываются (*) соответственно 2 и 5.
Но проблема по-прежнему существует, потому что указанное выше назначение (=
), похоже, не имело места.
Если бы это было так, то оба стали бы 5.
С нетерпением жду дальнейших разъяснений.
intAPtr++
— постинкремент. Весьма вероятно, что операции приращения выполняются последними после присваивания. Пробовали ли вы поместить этот код в IDE и запустить его, чтобы посмотреть, что он делает? - person Robert Harvey   schedule 06.01.2014