我有以下程序:
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"还有?
请帮忙。
答案 0 :(得分:0)
回答 - >为什么这句话" printf("%s%s",arr,ptr);"不打印字符串" geeksforgeeks"还有?
这里,arr的数组元素增加1,即g + 1 = h,e + 1 = f ....因此,由于++ * ptr增加ptr值,因此增加1。 ptr ++将增加1,这意味着ptr地址增加了' 1'。直到空字符。
所以,你正在打印arr它将值显示为hffltgpshfflt并打印现在指向NULL的ptr,它不打印任何内容。你可以通过%x格式检查ptr值,它打印0。