解释输出。它正在打印每个字母的下一个字母

Explain the output. It is printing next alphabet of every alphabet

#include<stdio.h>
int main()
{
  char arr[]  = "abcdef";
  char *ptr  = arr;


 while(*ptr != '[=10=]')
     ++*ptr++;
  printf("%s %s",arr,ptr);

  return 0;
}

输出:bcdefg

它正在打印给定的每个字母表的下一个字母表。 到底发生了什么?

关键是理解这条语句的作用

 ++*ptr++;

解析为

 ++(*(ptr++));

它增加了 ptr 指向的 ,同时也增加了 ptr

简短的回答是:不要那样写代码:)

这里有后缀++、前缀++、间接*三个运算符。

后缀 ++ 比其他两个具有更高的优先级,将首先被评估。但是当使用后缀 ++ 时,值计算在更新存储值的副作用之前排序,即递增指针。所以指针 ptr 会递增,但其他两个操作数 ++* 中使用的值将是旧值。

前缀 ++ 和间接运算符具有相同的优先级,但从右到左计算。所以间接 * 先行,然后前缀 ++ 递增对象指针 ptr 指向的值。