您好我定义了以下功能:
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;
答案 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]