Ete*_*ght 6 c recursion pointers pass-by-reference
直到现在,我一直在编写一个相当复杂的程序.无论如何,我应该编写一个操作结构列表的函数.我试图让这个问题尽可能简单,所以我写下了一段非常简单的代码供参考.
事情是这样的:首先我testf从另一个函数调用它,为它提供一个有效的current以及i一个值为0.这意味着testf在开始访问其余代码之前会调用自己约100次.这是所有生成的实例testf将开始得到解决的时候.
void testf(listnode *current, int *i) {
wordwagon *current2;
current2 = current;
if (*i < 100) {
*i = *i + 1;
current2 = current2->next;
testf(current2, i);
}
current = current->next;
return;
}
Run Code Online (Sandbox Code Playgroud)
如果,假设我有足够的连接列表节点,current = current->next;那么"最后一个"testf函数访问和编辑调用者的current2值(这个函数是什么current)的正确方法,还是我可怕的错误?如果我是,从被调用函数内部更改调用函数的变量的方法是什么,并确保它们不会在被调用函数返回后立即消失?我发现很难掌握指针的工作原理.
我很可能遗漏了重要信息,或者我没有清楚地问我的问题.如果是这种情况请通知我,以便我可以根据您的需要进行编辑.
提前致谢.
您可以将指针传递给函数中的指针,并取消引用它以返回 listnode 指针,这是之后代码的样子(未测试编译):
void testf(listnode **current, int *i) { // accept pointer to listnode pointer
wordwagon *current2;
current2 = *current; // retreive pointer value by dereferece
if (*i < 100) {
*i = *i + 1;
current2 = current2->next;
testf(¤t2, i); // recursively call by reference to the pointer
}
*current = (*current)->next; /* change the current pointer next pointer, CORRECTED as suggested by Azure */
return;
}
Run Code Online (Sandbox Code Playgroud)
以下是一些非常好的学习指南文章列表:
a)http://cslibrary.stanford.edu/102/PointersAndMemory.pdf
b) http://cslibrary.stanford.edu/103/LinkedListBasics.pdf
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |