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