C程序输出的说明

时间:2015-10-25 14:10:49

标签: c language-lawyer operator-precedence

以下程序提供输出:

hffltgpshfflt

有人可以解释一下,postfix ++,前缀++和dereference(*)运算符的运算符优先级如何决定这个输出?

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

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

  getchar();
  return 0;
}

1 个答案:

答案 0 :(得分:3)

一旦学会了operator precedence and associativity规则,就很容易了。

您的表达式++*ptr++相当于++*(ptr++),相当于++(*(ptr++))

所以操作顺序是

  1. 后增量运算符(返回指针ptr的旧值)
  2. 取消引用指针ptr(在指针递增之前)
  3. 取消引用结果的前缀 - 增量,增加ptr指向的值,例如, 'g''h'等。
  4. 指针ptr递增(实际上是步骤1的一部分)