C程序输出说明
以下程序给出输出:C程序输出说明,c,language-lawyer,operator-precedence,C,Language Lawyer,Operator Precedence,以下程序给出输出: hffltgpshfflt 有人能解释一下后缀++、前缀++和取消引用(*)运算符的运算符优先级是如何决定此输出的吗 #include<stdio.h> int main() { char arr[] = "geeksforgeeks"; char *ptr = arr; while(*ptr != '\0') ++*ptr++; printf("%s %s", arr, ptr); getchar(); return 0;
hffltgpshfflt
有人能解释一下后缀++、前缀++和取消引用(*)运算符的运算符优先级是如何决定此输出的吗
#include<stdio.h>
int main()
{
char arr[] = "geeksforgeeks";
char *ptr = arr;
while(*ptr != '\0')
++*ptr++;
printf("%s %s", arr, ptr);
getchar();
return 0;
}
#包括
int main()
{
char arr[]=“geeksforgeks”;
char*ptr=arr;
而(*ptr!='\0')
++*ptr++;
printf(“%s%s”,arr,ptr);
getchar();
返回0;
}
一旦学会了规则就很容易了
您的表达式++*ptr++
相当于++*(ptr++)
,后者相当于++(*(ptr++)
所以操作的顺序是
ptr
)ptr
(指针递增之前)ptr
指向的值,例如将'g'
变为'h'
等ptr
递增(实际上是步骤1的一部分)@JoachimPileborg好的,在这里收回接近票数的投票——在本例中,您是对的,前缀++绑定到取消引用的ptr。只是加上。。。他妈的为什么要写这样的代码?但是好吧,假设这是一个实验室的例子或者类似的东西…@MartinJames:不是真的…只是添加我真的需要手动插入括号(就像Joachim在他的回答中所做的那样)来理解它不是这个例子中两个
++
修改的相同内存位置。这绝对是任何人都不想在“生产”中看到的代码:)可能的副本。同样地,