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

时间:2015-11-03 14:52:29

标签: c debugging pointers linked-list

您好我定义了以下功能:

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;

2 个答案:

答案 0 :(得分:1)

该语句仅覆盖声明为函数参数

的局部变量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;
}

答案 1 :(得分:-2)

没有这个算法没问题,你不会修改列表。 如果要修改,则必须设置函数标题,如var letter = (line.match(/^\s*\(.{1,2})\)/) || [''])[0]