老师,函数的嵌套调用和递归调用有啥区别啊。递归调用为什么生命函数的时候要用到指针的指针来声明形参。代码中第30行的实参+1是不是地址偏移到了下一个位置的地址,还是扫描?递归都是怎么用的啊?老师啊,麻烦您给详细讲讲呗。
老师啊,我还有问题,别打我哈05行的代码char类型的直至数组变量cnames[]这个数组的地址传递给了22行的cnamearray这个指针的指针变量(这个cnamearray指针变量其实存储的是cnames[]数组的首地址,我理解的应该是对的吧)。然后往下的23行-31行是判断输出。从24行往下走,if中*cnamearray的值==end,程序return;那显然*cnamearray存储的地址是cnames[]数组的首地址。我的理由是:因为程序这是第一次判断啊,并且“end”得是*cnamearry+5之后的地址的值才能是“end”啊。那为什么第一次数出来的结果是“ken”而不是"Aaron"?我不知道我有没有理解错误,还是这个*cnamearry的地址+1是倒着往低来的?
老师啊,耽误您几分钟,给带问好的解答一下被,跪求了
18652179116 发表于2021-04-12 22:19
老师啊,我还有问题,别打我哈05行的代码char类型的直至数组变量cnames[]这个数组的地址传递给了22行的cnamearray这个指针的指针变量(这个cnamearray指针变量其实存储的是cnames[]数组的首地址,我理解的应该是对的吧)。然后往下的23行-31行是判断输出。从24行往下走,if中*cnamearray的值==end,程序return;那显然*cnamearray存储的地址是cnames[]数组的首地址。我的理由是:因为程序这是第一次判断啊,并且“end”得是*cnamearry+5之后的地址的值才能是“end”啊。那为什么第一次数出来的结果是“ken”而不是"Aaron"?我不知道我有没有理解错误,还是这个*cnamearry的地址+1是倒着往低来的?
老师啊,耽误您几分钟,给带问好的解答一下被,跪求了
这个问题 你可以在vs2019中按f11逐语句运行 然后你就能看出来程序是怎么运行出来的了
18652179116 发表于2021-04-12 21:49
老师,还是这个实列,还有问题,我持续看了好几遍,先不去管按个**指针的指针,就单纯的看第30行代码,又回到了22行去了对吗?也就是相当于是数组下标+1了,然后打印出来。(赋值到其他数组打印,for打印循环打印都可以的吧?)这个和循环语句有啥区别啊?干啥能用到这个递归函数啊?
这个问题
程序是这样运行的,主函数中调用DisplayNames,然后进入到自定义DisplayNames函数,判断if不符合,进入到else里,到else里就进行递归了,递归顺序就按名字那顺序一个一个递归,递归到end,执行了if,就return了,退出程序之后 才执行printf那句,依然是递归+输出,经过一次递归,此时指针已经直到了ken,就输出ken,再依次进行 这用f11就能看出来