繁体   English   中英

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM