关于PUTCHAR的C.

时间:2013-01-26 04:33:00

标签: c pointers recursion

#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的确切含义。任何帮助将不胜感激。

2 个答案:

答案 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;这意味着它会继续倒带