Я пытаюсь понять, как движутся указатели.
Ниже приводится программа, и я знаю, что
если
int cs={1,2,3};
затем cs
указывает на cs[0]
что мне не понятно, так это то, на что указывает * cs.
#include<stdio.h>
int main()
{
int array[] = { 1, 2, 3, 4, 5 };
int *arrptr1 = array;
int *arrptr = array;
int i;
for (i = 0; i < sizeof(array) / sizeof(int); i++) {
printf("%d, %d, %d\n", array[i], *arrptr1++, *arrptr + i);
}
}
вывод вышеуказанной программы
1, 1, 1
2, 2, 2
3, 3, 3
4, 4, 4
5, 5, 5
тогда мое понимание *arrptr
должно увеличить значение, хранящееся в
*arrptr
должно быть увеличено на 1.
Где, как я наблюдаю, указатель перемещается в следующее место. Просто хочу узнать, что не так в моем понимании?
UPDATE
Согласно ответам ниже, я понимаю, что
print("%d", *arrptr1++);
в таком утверждении оценка операторов производится справа налево.
Следовательно, в *arrptr1++
сначала будет оцениваться ++
, а затем arrptr
, а затем *
Таким образом, чтобы подтвердить то же самое, я написал другую программу
#include<stdio.h>
int main()
{
int array[] = { 10, 20, 30, 40, 50 };
int *q1 = array;
printf("q1 = %p\n",q1);
printf("*q1++ = %d\n",*q1++);
printf("q1 = %p\n",q1);
printf("*q1++ = %d\n",*q1);
}
Вывод вышеуказанной программы отличается от ожидаемого приоритета оператора вышеуказанной логикой.
Я получил вывод
q1 = 0x7ffffcff02e0
*q1++ = 10
q1 = 0x7ffffcff02e4
*q1++ = 20
Так что я ожидал во 2-й строке вывода вместо *q1++ = 10
после *q1++ = 20
так что приоритет оператора не произошел справа налево?