Сначала давайте упростить вашу программу в то, что сопоставимо:
char arr[] = "geeksforgeeks";
char* p = arr;
*p++;
printf("%s %c\n", arr, *p);
char* ptr = arr;
++*ptr++;
printf("%s %c\n", arr, *ptr);
Следующая позволяет посмотреть на operator precedence и выдвигают гипотезу, что мы ожидаем:
- приращения Postfix (Случается 1 ул, потому что он имеет самый высокий приоритет трех операторов)
- разыменования (бывает 2 й, потому что операторы старшинства 2 ассоциированных справа-слева)
- Prefix прирост (Случается последний, потому что это самый левый оператор низшего приоритета)
Таким образом, мы ожидаем, *p++
не иметь никакого эффекта, кроме продвижения p
к 2 й положения, потому что:
- Postfix увеличивает
p
- разыменовать адрес
p
без приращения адреса
И мы ожидаем, что ++*ptr++
приращения текущего символа и перехода ptr
к 2 nd позиция, поскольку:
- Postfix увеличиваем
ptr
- разыменовать адрес
ptr
без приращения адреса
- Increment значение
char
по адресу ptr
И глядя на эту Live Example вы можете увидеть, что наша гипотеза Правильно, мы даже получаем предупреждение о том, что:
Вычисленное значение не используется [-Унимое значение] *p++
Наши результаты:
geeksforgeeks е
heeksforgeeks е
Пожалуйста, не пишите такой код. Ты не знаешь, что ты хочешь. –
Какая часть, точно? – Bathsheba
здесь в первой программе * p ++ оценивается как * (p ++), потому что post fix имеет более высокий приоритет над указателем * – skvatss