Мое понимание следующего кода состоит в том, что ip
приращается во втором операторе printf
; то извлекается значение, на которое указывает *ip
. Но вывод показывает обратное.Приоритет оператора в скобках
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i[2] = { 1, 4 };
int *ip;
ip = i;
printf("%d\n", *ip);
printf("%d\n", *(ip++));
printf("%d\n", *ip);
return 0;
}
Выход:
1
1
4
Затем, путем перехода к оператору предварительно приращения, ++ip
, ожидаемый результат произошел.
код с преинкремента
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i[2] = { 1, 4 };
int *ip;
ip = i;
printf("%d\n", *ip);
printf("%d\n", *(++ip));
printf("%d\n", *ip);
return 0;
}
Выход:
1
4
4
Мое понимание приоритета операторов в C является то, что ()
имеют больший приоритет, чем оператор *
. С учетом сказанного, почему оператор post-increment, ip++
, не оценивается первым - так как он находится в пределах ()
.
Используйте правило - просто сделайте одну вещь на одной строке кода. Вы не ошибетесь, придерживаясь этого –
Это как раз то, как должно вести себя пост-инкремент, и не имеет ничего общего с приоритетом. – juanchopanza
@EdHeal Это был всего лишь код нуля для тестирования этого вопроса, который у меня был. – cryptic