| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1473 人关注过本帖
标题:这个递归把我绕晕了
只看楼主 加入收藏
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:2 
这个递归把我绕晕了
#include<stdio.h>

void DisplayNames(char** cNameArray);

char* cNames[]=
{
    "Aaron",
    "Jim",
    "Charles",
    "Sam",
    "Ken",
    "end"
};                    

int main()
{
    DisplayNames(cNames);            
    return 0;
}

void DisplayNames(char** cNameArray)
{
    if(*cNameArray=="end")
    {
        return ;
    }
    else
    {
        DisplayNames(cNameArray+1);        //这个调用放在这里结果会是倒排序输出数组的值,但是放在printf后面却能正顺序输出数组,好神奇啊,还有这个递归如果放在这里,后面那个printf应该是永远不能运行到的,为什么程序结果还会输出了数组的值呢
        printf("%s\n",*cNameArray);
    }
}

我对这个程序运行过程的理解是这样的:首先主函数中调用自定义函数,实参把指针数组的首地址传递给形参的二级指针,然后遇到if结构,因为是首地址指向的元素保存的值不是"end",所以跳到第二个选择else,再调用自己,传递二级指针+1(这个我理解是操作一级指针指向第二个元素的地址),然后有运行到if结构,此时地址值指向的第二个元素中的值也不是end,又跳到第二个选择else中...如此循环,知道地址值指向最后那个元素,就结束此程序,这样的逻辑好像没什么不对呀,但是实际运行时输出了指针数组的值,...

[此贴子已经被作者于2016-6-12 20:53编辑过]

搜索更多相关主题的帖子: include return 
2016-06-12 20:47
apiqqz
Rank: 2
等 级:论坛游民
威 望:2
帖 子:56
专家分:25
注 册:2011-9-2
收藏
得分:5 
嵌套道最后一个指向"end"的时候,会执行return;语句,这个时候返回的不是道mian(){...}函数中,而是上级的DisplayNamess(char**);的后面一条语句中也就是printf函数的地方,因此,数组中的每个值都会被打印
2016-06-13 08:53
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:5 
当*cNameArray=="end"时不再进入下层递归,开始返回

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-06-13 14:20
快速回复:这个递归把我绕晕了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016959 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved