C编程…链表指针迭代



你好,我定义了以下函数:

head();
traverse(struct *);

我担心在遍历列表时,它会被修改。

void tail()
{
    n3.next = (struct entry*) 0xff;
}
void traverse(struct entry *listPt)
{
    while(listPt != (struct entry *) 0xff)
    {
        printf("%in", 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( "%dn", *p );  // prints 20
}
int main( void )
{
    int x = 10;
    int *px = &x;
    printf( "%dn", *px );    // prints 10;
    func( px );
    printf( "%dn", *px );    // prints 10;
}

不,这个算法是可以的,你不会修改列表。如果你想修改,你必须像这样设置函数头void traverse(struct entry * & listPt)

最新更新