你好,我定义了以下函数:
head();
traverse(struct *);
我担心在遍历列表时,它会被修改。
void tail()
{
n3.next = (struct entry*) 0xff;
}
void traverse(struct entry *listPt)
{
while(listPt != (struct entry *) 0xff)
{
printf("%in", 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( "%dn", *p ); // prints 20
}
int main( void )
{
int x = 10;
int *px = &x;
printf( "%dn", *px ); // prints 10;
func( px );
printf( "%dn", *px ); // prints 10;
}
不,这个算法是可以的,你不会修改列表。如果你想修改,你必须像这样设置函数头void traverse(struct entry * & listPt)