Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 我很难理解以下代码的输出_Pointers_Operators - Fatal编程技术网

Pointers 我很难理解以下代码的输出

Pointers 我很难理解以下代码的输出,pointers,operators,Pointers,Operators,我有以下计划: int main() { char arr[] = "geeksforgeeks"; char *ptr = arr; while(*ptr != '\0') ++*ptr++; printf("%s %s", arr, ptr); getchar(); return 0; } 输出:hffltgpshfflt 解释如下: 如果知道操作符的优先级和结合性,那么就没有什么剩下的了。下面是运算符的优先级 Postfixx ++

我有以下计划:

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);
”也不打印字符串“geeksforgeks”? 请提供帮助。

回答-->为什么此语句“printf(“%s%s”,arr,ptr);”也不打印字符串“geeksforgeks”

这里,arr的数组元素增加1,即g+1=h,e+1=f。。。。因此,由于+++*ptr增加了ptr值,所以这个值增加了1。 ptr++将递增1表示ptr地址递增“1”。直到返回空字符

因此,您正在打印arr,它将值显示为hffltgpshfflt,并打印ptr,该ptr现在指向NULL,不打印任何内容。您可以通过打印0的%x格式检查ptr值。

回答-->为什么此语句“printf(“%s%s”,arr,ptr);”也不打印字符串“geeksforgeks”

这里,arr的数组元素增加1,即g+1=h,e+1=f。。。。因此,由于+++*ptr增加了ptr值,所以这个值增加了1。 ptr++将递增1表示ptr地址递增“1”。直到返回空字符


因此,您正在打印arr,它将值显示为hffltgpshfflt,并打印ptr,该ptr现在指向NULL,不打印任何内容。您可以通过打印0的%x格式检查ptr值。

它怎么可能打印“Geeksforgeks”?
arr
中的所有字符都已递增,原始字符串不再存在。请注意,
ptr
打印为空字符串,因为它最终指向
arr
末尾的空字符。您的意思是,通过指针ptr,我们更改了原始arr,因此更改的内容现在是“hffltgpshfflt”@jasonharperYes,没错
ptr
依次指向
arr
的每个元素(当到达末尾的空字符时停止),这些元素是前导
++
递增的元素。明白了。谢谢:)@jasonharper它怎么可能打印“Geeksforgeks”?
arr
中的所有字符都已递增,原始字符串不再存在。请注意,
ptr
打印为空字符串,因为它最终指向
arr
末尾的空字符。您的意思是,通过指针ptr,我们更改了原始arr,因此更改的内容现在是“hffltgpshfflt”@jasonharperYes,没错
ptr
依次指向
arr
的每个元素(当到达末尾的空字符时停止),这些元素是前导
++
递增的元素。明白了。谢谢:)@jasonharper