Recursion 使用递归打印字符串的反转

Recursion 使用递归打印字符串的反转,recursion,Recursion,此代码适用于: void reverse(char *str) { if(*str) { reverse(str+1); printf("%c", *str); } } 但是,如果我用reverse(++str)更改reverse(str+1),它不会打印第一个字符 在:极客 输出:skee 我不知道为什么。++str先递增然后打印,您需要str++,因为您在方法的第一次调用中更改给您的指针,所以当它最终开始打印并完成执行时,索引已经增加到第二个字符 在第一种情

此代码适用于:

 void reverse(char *str)
{
   if(*str) 
   {
   reverse(str+1);
   printf("%c", *str);
  }
}
但是,如果我用reverse(++str)更改reverse(str+1),它不会打印第一个字符

在:极客

输出:skee

我不知道为什么。

++str
先递增然后打印,您需要
str++
,因为您在方法的第一次调用中更改给您的指针,所以当它最终开始打印并完成执行时,索引已经增加到第二个字符

在第一种情况下,str+1,str根本没有被修改,所以最后一个printf只打印第一个字符


请记住,前缀和后缀++实际上改变了变量的值。

Hm,reverse(str++)将无限大或使seg。过错因为下一个函数只获取str,所以递增的str将保留在上一个函数中,并且只有该函数才能看到它。:)接得好,那么你想完成什么呢?您想让另一个函数同时获取str并附加到它吗?在++str的例子中,另一个函数得到str的附加值,因为你以前有过++,实际上,我只是“试验”了str++的东西。我第一次尝试解决这个问题时,我做了str+1。str++在我看来也是一样,所以是的,只是出于好奇。我通过了C语言编程一级考试,现在是二级,只想尽快掌握C语言。:)