以下程序提供输出:
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;
}
答案 0 :(得分:3)
一旦学会了operator precedence and associativity规则,就很容易了。
您的表达式++*ptr++
相当于++*(ptr++)
,相当于++(*(ptr++))
。
所以操作顺序是
ptr
的旧值)ptr
(在指针递增之前)ptr
指向的值,例如, 'g'
至'h'
等。ptr
递增(实际上是步骤1的一部分)