#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的确切含义。任何帮助将不胜感激。
答案 0 :(得分:4)
此函数以递归方式为字符串中的每个连续字符调用自身,并在到达\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步:
重复这两个步骤,到达字符串的末尾,即基本情况。
它不会反转字符串,而只是反向打印字符串。
答案 1 :(得分:4)
假设你的字符串是&#34; Viad&#34;
首先发送&#34; Viad&#34;扭转功能,
reverse("Viad");
在反向功能中,你再次调用反向功能,但这次你发送第二个字符的地址,即你正在发送&#34; iad&#34; ,
reverse("iad");
再次呼吁撤消,现在发送&#34; ad&#34;,
reverse("ad");
再次&#34; d&#34;,
reverse("d");
现在发送&#39; \ 0&#39;结束角色
现在这次return
&amp;
现在它因Stack functionality
而倒带,即当我们调用某个函数时,它会将当前状态的变量保存在堆栈和放大器中。在完成该功能的所有陈述之后,它返回意味着它从堆栈中弹出所有已保存的状态
现在转到声明
putchar('d');
它打印&#34; d&#34; &安培;
然后打印&#34; da&#34; &安培;然后&#34; dai&#34; &安培;然后&#34; daiV&#34;这意味着它会继续倒带