老师,函数的嵌套调用和递归调用有啥区别啊。递归调用为什么生命函数的时候要用到指针的指针来声明形参。代码中第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*)对不对.如果我以上的理解是对的,那此时的指针在输出的时候应该往更高的地址偏移啊,怎么会输出来的逆序的字符串?老师,我就卡在这里了
18652179116 发表于2021-04-13 15:14
老师:这个输出的我F11了,就在30-31-30-31来回跳,然后输出。您刚刚说,一次递归以后,指针已经指到了ken了。那么问题来了,此时的指针是*cnamearray存储的canmes[]的地址对不对?也就是*cnamearray的地址的位置对不对?那么既然此时已经指向了“ken”,cnamearray+1就是*cnamearray自己的地址偏移了一个sizeof(char*)对不对.如果我以上的理解是对的,那此时的指针在输出的时候应该往更高的地址偏移啊,怎么会输出来的逆序的字符串?老师,我就卡在这里了
跳出递归之后 就输出了 指针不往下加了 而是一个一个输出了 就相当于一个一个释放了