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



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

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