#include<stdio.h>
int main()
{
char arr[] = "abcdef";
char *ptr = arr;
while(*ptr != '\0')
++*ptr++;
printf("%s %s",arr,ptr);
return 0;
}
输出:bcdefg
打印下面给出的每个字母的字母表。 究竟发生了什么?
答案 0 :(得分:0)
关键是要理解这句话的作用
++*ptr++;
被解析为
++(*(ptr++));
它增加ptr
指向的值,并递增ptr
。
简短的回答是:不要写这样的代码:)
答案 1 :(得分:0)
这里有三个运算符后缀++
,前缀++
和间接*
。
后缀++
的优先级高于其他两个,并且将首先进行评估。但是当使用后缀++
时,值计算在更新存储值的副作用之前排序,即增加指针。因此指针ptr
将增加,但其他两个操作数++
和*
中使用的值将是旧的。
前缀++
和间接运算符具有相同的优先级,但是从右到左进行求值。所以间接*
先行,然后前缀++
增加对象指针ptr
指向的值。