我无法理解以下代码

时间:2017-03-16 13:47:17

标签: pointers operators

我有以下程序:

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"还有? 请帮忙。

1 个答案:

答案 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。