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();
}
} 展开
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();
}
} 展开
1个回答
展开全部
用普通语音的方式解释一下程序运行的顺序和规则:
首先定义了一个字符串指针数组,最后一个指向的字符串是"end"
主函数调用DisplayNames显示这个数组指向的所有字符串(不包括最后的那个end)
DisplayNames函数:
判断当前提供的字符串指针指向的字符串是否“end”,如果是,直接返回,什么也不做;
否则用当前字符串指针的下一位置指针调用另一个DisplayNames函数,等它返回后将当前不等于end的字符串printf出来并等待键盘输入一个字符后返回调用者
结果就是,会倒序输出所有字符串,最终返回主函数并结束运行
这里会调用多个DisplayNames函数,每个函数调用时调用者不同,但处理相同而已。你可以简单理解为,调用基础DisplayNames你就写几遍DisplayNames函数,第1次取名并调用的是DisplayNames1,...,第n次调用的是DisplayNamesN,每个函数的运行除返回值以外(DisplayNames没有返回值)不互相影响
首先定义了一个字符串指针数组,最后一个指向的字符串是"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"时,由于再后面的字符串不存在也不能用
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询