我在理解下面的代码的输出麻烦
问题描述:
我有以下程序:我在理解下面的代码的输出麻烦
int main()
{
char arr[] = "geeksforgeeks";
char *ptr = arr;
while(*ptr != '\0')
++*ptr++;
printf("%s %s", arr, ptr);
getchar();
return 0;
}
输出:hffltgpshfflt
给出的解释是:
如果一个人知道的优先级和结合那么运营商就没有多少东西了。以下是运营商的优先级。
Postfixx ++ left-to-right
Prefix ++ right-to-left
Dereference * right-to-left
因此表达++*ptr++
具有以下效果:
- 的
*ptr
值被递增 - 的
ptr
值被递增
我的问题是如何这个指针表达++*ptr++
越来越实施,为什么这个声明“printf("%s %s", arr, ptr);
”不打印字符串“geeksforgeeks”以及? 请帮忙。
答
回答 - >为什么这个语句“printf(”%s%s“,arr,ptr);”不打印字符串“geeksforgeeks”以及?
这里,arr的数组元素增加1,即g + 1 = h,e + 1 = f ....所以由于++ * ptr增加了ptr值。 ptr ++将递增1,这意味着ptr地址增加'1'。直到空字符。
所以,你正在打印arr它显示的值为hffltgpshfflt并且打印现在指向NULL的ptr,它不打印任何东西。你可以通过%x格式检查ptr值,它打印0.
它怎么可能打印“geeksforgeeks”? ''arr''中的所有字符都已增加,原始字符串不再存在。注意''ptr''输出为空字符串,因为它最终指向''arr''结尾的空字符。 – jasonharper
所以你的意思是说,通过指针ptr,我们改变了原来的arr,因此改变后的事物现在是“hffltgpshfflt”? @jasonharper –
是的,正好。 ''ptr''依次指向''arr''的每个元素(当它到达末尾的空字符时停止),这些元素是前导'++''递增的。 – jasonharper