这个递归把我绕晕了
#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编辑过]