C 程序输出的说明

Explanation of output of a C program

以下程序给出输出:

hffltgpshfflt

谁能解释一下 postfix++、prefix++ 和 dereference(*) 运算符的运算符优先级是如何决定这个输出的?

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

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

  getchar();
  return 0;
}

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

你的表达式 ++*ptr++ 等价于 ++*(ptr++) 等价于 ++(*(ptr++)).

所以运算顺序是

  1. post自增运算符(其中returns指针的旧值ptr
  2. 指针的取消引用ptr(在指针递增之前)
  3. 取消引用结果的前缀增量,增加 ptr 指向的值,转向例如'g''h'
  4. 指针ptr递增(实际上是第1步的一部分)