C编程...链表指针迭代

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)