解释输出。它正在打印每个字母的下一个字母
Explain the output. It is printing next alphabet of every alphabet
#include<stdio.h>
int main()
{
char arr[] = "abcdef";
char *ptr = arr;
while(*ptr != '[=10=]')
++*ptr++;
printf("%s %s",arr,ptr);
return 0;
}
输出:bcdefg
它正在打印给定的每个字母表的下一个字母表。
到底发生了什么?
关键是理解这条语句的作用
++*ptr++;
解析为
++(*(ptr++));
它增加了 ptr
指向的 值 ,同时也增加了 ptr
。
简短的回答是:不要那样写代码:)
这里有后缀++
、前缀++
、间接*
三个运算符。
后缀 ++
比其他两个具有更高的优先级,将首先被评估。但是当使用后缀 ++
时,值计算在更新存储值的副作用之前排序,即递增指针。所以指针 ptr
会递增,但其他两个操作数 ++
和 *
中使用的值将是旧值。
前缀 ++
和间接运算符具有相同的优先级,但从右到左计算。所以间接 *
先行,然后前缀 ++
递增对象指针 ptr
指向的值。
#include<stdio.h>
int main()
{
char arr[] = "abcdef";
char *ptr = arr;
while(*ptr != '[=10=]')
++*ptr++;
printf("%s %s",arr,ptr);
return 0;
}
输出:bcdefg
它正在打印给定的每个字母表的下一个字母表。 到底发生了什么?
关键是理解这条语句的作用
++*ptr++;
解析为
++(*(ptr++));
它增加了 ptr
指向的 值 ,同时也增加了 ptr
。
简短的回答是:不要那样写代码:)
这里有后缀++
、前缀++
、间接*
三个运算符。
后缀 ++
比其他两个具有更高的优先级,将首先被评估。但是当使用后缀 ++
时,值计算在更新存储值的副作用之前排序,即递增指针。所以指针 ptr
会递增,但其他两个操作数 ++
和 *
中使用的值将是旧值。
前缀 ++
和间接运算符具有相同的优先级,但从右到左计算。所以间接 *
先行,然后前缀 ++
递增对象指针 ptr
指向的值。