C语言递归调用,不太懂,请大神帮忙解释一下,万分感谢!

#include<stdio.h>voidDisplayNames(char**cNameArray);/*声明函数,函数的形参为指向指针的指针,类似二维数组但不是,没有... #include <stdio.h>

void DisplayNames(char** cNameArray);/*声明函数,函数的形参为指向指针的指针,类似二维数组但不是,没有二维限制。
用于指向不限个数、不限长度的字符串的组合。
比如[张三, 李四, 王五, 爱新觉罗]名字数量可以不限,名字长度可以不限。*/
char* cNames[] = //表示数组中的每一个元素都是指针.
{
"Aaron",
"Jim",
"Chanrles",
"Sam",
"Ken",
"end"
};

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

void DisplayNames(char** cNameArray)
{
if (*cNameArray == "end")//这里又是什么意思?
{

return;//这是返回的是什么?什么意思?
}
else
{
DisplayNames(cNameArray +1);//这里的+1是什么意思?
printf("%s\n", *cNameArray);
getchar();
}

}
展开
 我来答
cdyzxy
2017-01-30 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:84%
帮助的人:3604万
展开全部
用普通语音的方式解释一下程序运行的顺序和规则:
首先定义了一个字符串指针数组,最后一个指向的字符串是"end"
主函数调用DisplayNames显示这个数组指向的所有字符串(不包括最后的那个end)

DisplayNames函数:

判断当前提供的字符串指针指向的字符串是否“end”,如果是,直接返回,什么也不做;
否则用当前字符串指针的下一位置指针调用另一个DisplayNames函数,等它返回后将当前不等于end的字符串printf出来并等待键盘输入一个字符后返回调用者

结果就是,会倒序输出所有字符串,最终返回主函数并结束运行
这里会调用多个DisplayNames函数,每个函数调用时调用者不同,但处理相同而已。你可以简单理解为,调用基础DisplayNames你就写几遍DisplayNames函数,第1次取名并调用的是DisplayNames1,...,第n次调用的是DisplayNamesN,每个函数的运行除返回值以外(DisplayNames没有返回值)不互相影响
追问
还是不太明白,DisplayNames(cNameArray +1);这里为什么要+1?+2为什么就错误?-1也不行,不加也不行。头疼!!!
追答
主函数中DisplayNames(cNames);相当于DisplayNames(cNames+0);

或者可以写成DisplayNames(&cNames[0]);

那么加1就可以看成是DisplayNames(&cNames[1]);依此类推

如果当前的cNameArray指向的是cNames[0],则cNameArray+1就指向cNames[1]了

cNameArray-1,当cNameArray=&cNames[0];时,因cNames[-1]不存在而不能用,cNameArray+2,当cNameArray指向cNames的最后一个字符串"end"时,由于再后面的字符串不存在也不能用
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式