Операции с указателями и приоритет операторов в C
Просто поговорил с парнем из 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.
С нетерпением ждем дальнейшего просвещения.