#include <stdio.h>
void reverse( const char * const sPtr );
int main ( void ) {
char sentence[ 80 ];
fgets( sentence, 80, stdin);
reverse (sentence);
return 0;
}
void reverse( const char * const sPtr ){
if (sPtr[0] == '\0' )
return;
else {
reverse( &sPtr[1] );
putchar (sPtr [0] );
}我通常对反向函数是如何工作的感到困惑?我不知道指针是如何递增来指向下一个字符的,我也不知道我是否确切地理解了putchar的作用。任何帮助都将不胜感激。
发布于 2013-01-26 12:36:07
此函数递归地为字符串中的每个连续字符调用自身,并在到达\0字符时以相反的顺序展开打印字符。
步骤1:
void reverse( const char * const sPtr ){ //This calls the function with string这里,sPtr指向字符串的第一个字符。
步骤2:
reverse( &sPtr[1] ); //This calls the function with the next character of the string这一行就是让函数前进的地方。
步骤3:
重复这两个步骤,您将到达字符串的末尾,即基本大小写。
它不是反转字符串,而是简单地反转打印字符串。
发布于 2013-01-26 12:42:05
假设字符串是"Viad“
首先它发送"Viad“到反向函数,
reverse("Viad");在反向函数中,再次调用反向函数,但这一次是发送第二个字符的地址,即发送"iad“,
reverse("iad");它再次调用反转,现在它发送"ad",
reverse("ad");又是"d",
reverse("d");现在它发送'\0‘结束字符
这一次它返回了,这是因为Stack functionality,也就是说,当我们调用某个oher函数时,它将变量的当前状态保存在堆栈中&在完成该函数的所有语句后,它返回意味着它从堆栈中弹出所有保存的状态
现在它转到statement
putchar('d');它打印"d“&
然后打印"da“,然后是"dai”,然后是"daiV“,这意味着它继续倒带
https://stackoverflow.com/questions/14533887
复制相似问题