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++))
.
所以运算顺序是
- post自增运算符(其中returns指针的旧值
ptr
)
- 指针的取消引用
ptr
(在指针递增之前)
- 取消引用结果的前缀增量,增加
ptr
指向的值,转向例如'g'
到 'h'
等
- 指针
ptr
递增(实际上是第1步的一部分)
以下程序给出输出:
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++))
.
所以运算顺序是
- post自增运算符(其中returns指针的旧值
ptr
) - 指针的取消引用
ptr
(在指针递增之前) - 取消引用结果的前缀增量,增加
ptr
指向的值,转向例如'g'
到'h'
等 - 指针
ptr
递增(实际上是第1步的一部分)