[英]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.