老师,函数的嵌套调用和递归调用有啥区别啊。递归调用为什么生命函数的时候要用到指针的指针来声明形参。代码中第30行的实参+1是不是地址偏移到了下一个位置的地址,还是扫描?递归都是怎么用的啊?老师啊,麻烦您给详细讲讲呗。
李木子 发表于2021-04-13 14:50
这个问题
程序是这样运行的,主函数中调用DisplayNames,然后进入到自定义DisplayNames函数,判断if不符合,进入到else里,到else里就进行递归了,递归顺序就按名字那顺序一个一个递归,递归到end,执行了if,就return了,退出程序之后 才执行printf那句,依然是递归+输出,经过一次递归,此时指针已经直到了ken,就输出ken,再依次进行  这用f11就能看出来
老师:这个输出的我F11了,就在30-31-30-31来回跳,然后输出。您刚刚说,一次递归以后,指针已经指到了ken了。那么问题来了 ,此时的指针是*cnamearray存储的canmes[]的地址对不对?也就是*cnamearray的地址的位置对不对?那么既然此时已经指向了“ken”,cnamearray+1就是*cnamearray自己的地址偏移了一个sizeof(char*)对不对.如果我以上的理解是对的,那此时的指针在输出的时候应该往更高的地址偏移啊,怎么会输出来的逆序的字符串?老师,我就卡在这里了
,此时的指针是*cnamearray存储的canmes[]的地址对不对?也就是*cnamearray的地址的位置对不对?那么既然此时已经指向了“ken”,cnamearray+1就是*cnamearray自己的地址偏移了一个sizeof(char*)对不对.如果我以上的理解是对的,那此时的指针在输出的时候应该往更高的地址偏移啊,怎么会输出来的逆序的字符串?老师,我就卡在这里了
18652179116 发表于2021-04-13 15:14
老师:这个输出的我F11了,就在30-31-30-31来回跳,然后输出。您刚刚说,一次递归以后,指针已经指到了ken了。那么问题来了 ,此时的指针是*cnamearray存储的canmes[]的地址对不对?也就是*cnamearray的地址的位置对不对?那么既然此时已经指向了“ken”,cnamearray+1就是*cnamearray自己的地址偏移了一个sizeof(char*)对不对.如果我以上的理解是对的,那此时的指针在输出的时候应该往更高的地址偏移啊,怎么会输出来的逆序的字符串?老师,我就卡在这里了
,此时的指针是*cnamearray存储的canmes[]的地址对不对?也就是*cnamearray的地址的位置对不对?那么既然此时已经指向了“ken”,cnamearray+1就是*cnamearray自己的地址偏移了一个sizeof(char*)对不对.如果我以上的理解是对的,那此时的指针在输出的时候应该往更高的地址偏移啊,怎么会输出来的逆序的字符串?老师,我就卡在这里了
跳出递归之后 就输出了 指针不往下加了 而是一个一个输出了 就相当于一个一个释放了

 
	
                                                 VIP会员
VIP会员 购物车
购物车


 私信
                         私信 
                     
					 
					 
					 
					 
					 发表新帖
发表新帖 立即签到
立即签到 查看电子书
查看电子书
                                
        		  
        		 
         		 关注
关注
                  回复
 回复 支持(
                	支持( 反对(
                    反对( 
                    



 
                







 
                     
                     
					 
						 
						 
						 
						