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

时间:2015-06-26 18:09:07

标签: c pointers increment decrement

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


 while(*ptr != '\0')
     ++*ptr++;
  printf("%s %s",arr,ptr);

  return 0;
}

输出:bcdefg

打印下面给出的每个字母的字母表。 究竟发生了什么?

2 个答案:

答案 0 :(得分:0)

关键是要理解这句话的作用

 ++*ptr++;

被解析为

 ++(*(ptr++));

它增加ptr指向的,并递增ptr

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

答案 1 :(得分:0)

这里有三个运算符后缀++,前缀++和间接*

后缀++的优先级高于其他两个,并且将首先进行评估。但是当使用后缀++时,值计算在更新存储值的副作用之前排序,即增加指针。因此指针ptr将增加,但其他两个操作数++*中使用的值将是旧的。

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