为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2021-12-31 18:14:20
代码如下:#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.求解!!!!!!!!!!!!
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

原来的程序不能运行吧?

这是因为

char* cNames[]=  /*定义字符串数组   数组指针*/
{
"Aaron",  /*为字符串进行赋值*/
"Jim",
"Charles",
"Sam",
"Ken",
"end"   /*设定结束标志*/
};

中的cNames[5](即指向"end"的指针)与if(*cNameArray=="end")中右边的指向字符串常量"end"(这是另一个常量,与前面的那个只是串值相同而已,却不是同一个常量)的指针是两个不同值的指针,所以它们永远都不可能相等。所以程序会陷入无限的递归。

以下是改好的程序:

#include<stdio.h>

#include<string.h>            /*增加了此行*/

void DisplayNames(char** cNameArray); /*声明函数  二级指针*/

char* cNames[]=  /*定义字符串数组   数组指针*/

{

 "Aaron",  /*为字符串进行赋值*/

 "Jim",

 "Charles",

 "Sam",

 "Ken",

 "end"   /*设定结束标志*/

};

int main()

{

 DisplayNames(cNames);  /*调用递归函数*/

 return 0;

}

void DisplayNames(char** cNameArray)

{

 if(strcmp(*cNameArray,"end")==0) /*判断结束标志  ====       修改了此行*/

 {

  return ;   /*函数结束返回*/

 }

 else

 {

  DisplayNames(cNameArray+1);  /*调用递归函数*/

  printf("%s\n",*cNameArray);  /*输出字符串*/

 }

}

 


查看完整回答
反对 回复 2022-01-03
  • 1 回答
  • 0 关注
  • 509 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信