以下内容是关于函数递归问题。求解释!

代码如下:
#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("%s\n",*cNameArray); /*输出字符串*/
}
}

问题:其中的 DisplayNames(cNameArray+1); 这里该如何理解,最好能加QQ734202639.
求解!!!!!!!!!!!!

HUH函数
浏览 510回答 1
1回答

慕姐8265434

原来的程序不能运行吧?这是因为char* cNames[]= &nbsp;/*定义字符串数组 &nbsp; 数组指针*/{"Aaron", &nbsp;/*为字符串进行赋值*/"Jim","Charles","Sam","Ken","end" &nbsp; /*设定结束标志*/};中的cNames[5](即指向"end"的指针)与if(*cNameArray=="end")中右边的指向字符串常量"end"(这是另一个常量,与前面的那个只是串值相同而已,却不是同一个常量)的指针是两个不同值的指针,所以它们永远都不可能相等。所以程序会陷入无限的递归。以下是改好的程序:#include<stdio.h>#include<string.h>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*增加了此行*/void DisplayNames(char** cNameArray); /*声明函数 &nbsp;二级指针*/char* cNames[]= &nbsp;/*定义字符串数组 &nbsp; 数组指针*/{&nbsp;"Aaron", &nbsp;/*为字符串进行赋值*/&nbsp;"Jim",&nbsp;"Charles",&nbsp;"Sam",&nbsp;"Ken",&nbsp;"end" &nbsp; /*设定结束标志*/};int main(){&nbsp;DisplayNames(cNames); &nbsp;/*调用递归函数*/&nbsp;return 0;}void DisplayNames(char** cNameArray){&nbsp;if(strcmp(*cNameArray,"end")==0) /*判断结束标志 &nbsp;====&nbsp; &nbsp; &nbsp; &nbsp;修改了此行*/&nbsp;{&nbsp; return ; &nbsp; /*函数结束返回*/&nbsp;}&nbsp;else&nbsp;{&nbsp; DisplayNames(cNameArray+1); &nbsp;/*调用递归函数*/&nbsp; printf("%s\n",*cNameArray); &nbsp;/*输出字符串*/&nbsp;}}&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript
Java