以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  关于递归的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=54567)


--  作者:jiangwei
--  发布时间:10/29/2007 12:32:00 PM

--  关于递归的问题
# include "stdio.h"

void reverse(const char * const sPtr);

int main()
{
        char sentence[80];

        printf("Enter a line of text: ");
        gets(sentence);
        printf("The line printed backwards is: ");
        reverse(sentence);
        printf("\n");

        return 0;
}

void reverse(const char * const sPtr)
{
        if(sPtr[0] == '\0')
                return;
        else&
        {
                reverse(&sPtr[1]); /*递归步骤*/
                putchar(sPtr[0]);
        }
}

请问函数定义里,“递归步骤”中它是怎么执行的啊?怎么是(&sptr[1]),输出是(sptr[0])


--  作者:卷积内核
--  发布时间:10/29/2007 5:25:00 PM

--  
if(sPtr[0] == '\0')-------------------------如果结束退出
                return;
        else&
        {
                reverse(&sPtr[1]); /*递归步骤*/---------该函数就是递归函数,调用本身
                putchar(sPtr[0]);-----------递归出来放置最后一个字符。
        }

--  作者:jiangwei
--  发布时间:10/29/2007 10:36:00 PM

--  
还问一个问题,如果一个数组,比如说a[4]={1,2,3,4}.a[0]的地址假如说是0000吧,a[1],a[2]a[3]分别为0001,0002,0003的话,如果现在把a[1]的地址值赋给a[0],那么a[0]=2,a[1]=3,a[2]=4,是这样吗?
--  作者:卷积内核
--  发布时间:10/30/2007 8:00:00 AM

--  
不能这么理解,这根本就不是同一个概念,要清楚地址和里面的值是完全两回事。拿家庭来说地址就是门牌号,里面的人才是内容。这两个概念搞混了 你后面的指针就没法学了。
--  作者:jiangwei
--  发布时间:10/30/2007 10:19:00 AM

--  
哦,但我觉得我问你的那个关于递归的问题,它在执行的时候好像就是用的这个原理啊,我觉得内存的地址值是固定不变的,如果把原来的a[1]改成了a[0],那后面的a[2],a[3]以后的,我觉得就是a[1],a[2]了吧?
--  作者:卷积内核
--  发布时间:10/30/2007 1:49:00 PM

--  
它们执行不是对地址操作,而是里面的值。你没有必要关心它的具体所在内存地址是多少,只关心你想操作的数据就可以了。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms