Я не могу понять это. Возможно, это потому, что он 2 утра. Во всяком случае, я здесь в затруднении.
#include <stdio.h>
int main()
{
char array[] = "123456789";
char* ptr = array;
printf("%c\n", *(ptr++));
printf("%c\n", *ptr);
*ptr = array[3];
printf("%c\n", *(ptr++));
printf("%c\n\n", *ptr);
return 0;
}
Результат:
1
2
4
3
-
У меня есть указатель, который я назначаю
array
. -
Затем я печатаю, что, по моему мнению, будет первым индексом (
'2'
), но вместо этого получим1
. - Итак, я предполагаю, что*(ptr++)
фактически разыгрывает, прежде чем он увеличивает указатели. -
Затем я переназначаю
ptr
4-й индекс ('4'
) и повторю шаг 2. Это работает так, как ожидается, теперь, когда Я вижу, что C не вычисляет скобки сначала перед разыменованием. -
Затем я печатаю новый приращенный
ptr
для отображения ('5'
)... и я получаю3
?
Как это, шаги 1 и 2 и 3 и 4 идентичны, но я получаю разные результаты?