簡體   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