在下面的示例程序中,任何人都可以帮助解决2个函数输出之间的差异吗?
根据我的理解,两个函数的输出应该相同。
#include<stdio.h>
void printRevStr1(char *ptr)
{
if(*ptr)
{
printRevStr1(ptr+1);
printf("%c",*ptr);
}
}
void printRevStr2(char *ptr)
{
if(*ptr)
{
ptr++;
printRevStr2(ptr);
printf("%c",*ptr);
}
}
main()
{
char arr[100]="Stackoverflow";
printRevStr1(arr);
printf("\n");
printRevStr2(arr);
printf("\n");
}
以下是输出
输出
wolfrevokcatS
wolfrevokcat
答案 0 :(得分:2)
它工作得很好......但是你正在推进和打印下一个角色,当它真的是你应该打印的前一个角色时:
void printRevStr2(char *ptr)
{
if(*ptr)
{
ptr++;
printRevStr2(ptr);
printf("%c",*(ptr - 1)); // <----- here
}
}
这给出了
wolfrevokcatS
wolfrevokcatS
答案 1 :(得分:2)
很简单。
请按功能检查以下说明:
void printRevStr1(char *ptr)
{
if(*ptr)
{
printRevStr1(ptr+1);
printf("%c",*ptr);
}
}
当您实现此功能时,您输入的字符串为Stackoverflow
然后你只需反转字符串并打印它。
在第二个功能中:
void printRevStr2(char *ptr)
{
if(*ptr)
{
ptr++;
printRevStr2(ptr);
printf("%c",*ptr);
}
}
您在打印前编写的语句:ptr++;
将指针移动到字符串中的下一个字符。那就是你现在的字符串变成tackoverflow
因此你收到了这样的输出。我希望这会对你有所帮助。