[英]C programming… Linked List Pointer Iteration
您好,我定义了以下函数:
head();
traverse(struct *);
我担心在遍历列表时它正在被修改。
void tail()
{
n3.next = (struct entry*) 0xff;
}
void traverse(struct entry *listPt)
{
while(listPt != (struct entry *) 0xff)
{
printf("%i\n", listPt->value);
listPt = listPt->next;
}
}
我应该使用不同的算法来迭代列表吗? 复制列表更有利吗?
while 循环中的以下表达式是否覆盖了现有(值)内存?
listPt = listPt->next;
该语句仅覆盖声明为函数参数的局部变量listPt
struct entry *listPt
它不会修改列表本身。
函数参数是它的局部变量。 该函数处理其参数的副本。 参数的任何更改都不会影响相应的参数。
考虑
#include <stdio.h>
void func( int *p )
{
int y = 20;
p = &y;
printf( "%d\n", *p ); // prints 20
}
int main( void )
{
int x = 10;
int *px = &x;
printf( "%d\n", *px ); // prints 10;
func( px );
printf( "%d\n", *px ); // prints 10;
}
不,这个算法没问题,你不会修改列表。 如果你想修改你必须像这样设置函数头void traverse(struct entry * & listPt)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.