C++ 将两个指针初始化到“中的相同值”;至于;环
我正在使用一个链表,并试图初始化两个指针,这两个指针等于“first”/“head”指针。我试图在C++ 将两个指针初始化到“中的相同值”;至于;环,c++,pointers,C++,Pointers,我正在使用一个链表,并试图初始化两个指针,这两个指针等于“first”/“head”指针。我试图在for循环中干净利落地完成这项工作。这一切的意义在于,我可以在链表中运行两个指针,一个在另一个后面(以便我可以根据需要修改) 比如: //listHead = main pointer to the linked list for (blockT *front, *back = listHead; front != NULL; front = front->next) //...// back
for
循环中干净利落地完成这项工作。这一切的意义在于,我可以在链表中运行两个指针,一个在另一个后面(以便我可以根据需要修改)
比如:
//listHead = main pointer to the linked list
for (blockT *front, *back = listHead; front != NULL; front = front->next)
//...//
back = back->next;
我的想法是,我可以提前增加前端,这样它就提前一个,完成工作,而不增加“back”,直到代码块的底部,以防我需要备份以修改链接列表
不管“为什么”,除了上面提到的,我还试过:
for (blockT *front = *back = listHead; /.../
for (blockT *front = listHead, blockT *back = listHead; /.../
我想避免指针指向指针。我是否只需要在循环之前初始化这些变量?您可以将变量声明从for中取出:
blockT *front, *back;
for (front = back = listHead; front != NULL; front = front->next)
但出于您的目的,这更符合逻辑:
for (blockT *front = listHead, *back = 0;
front != NULL;
back = front, front = front->next) {
/* if (back != 0) backup */
}
你差一点就成功了
for (blockT *front = listHead, *back = listHead; front != NULL; front = front->next)
注意,它是一种语法糖。事实上,它只是
int x = 0, y = 1;
我将指针的声明放在循环之外:
//listHead = main pointer to the linked list
blockT *front, *back;
for (front = back = listHead; front != NULL; front = front->next) {
//...//
back = back->next;
}
这样,您还可以执行back=back->next如果出于某种原因需要,代码>行(在循环之外),尽管我想您希望它在那里。在循环中声明变量(当然包括指针)会使它们在循环外部不可用
更新:
但是,如果您只需要数组的指针,我会选择:
for (blockT *front = listHead, *back = listHead; front != NULL; front = front->next) {
//...//
back = front;
}
语法是:
for ( BlockT* front = listHead, *previous = NULL;
front != NULL;
front = front->next ) {
// ...
previous = front;
}
循环中的previous
需要特殊情况,以便
测试并避免在列表前面备份。或者,
您可以使用&listfead
,而不是NULL
,但您需要
使用它玩类型游戏(并且确保您不尝试修改任何
成员)。如果您只需要能够插入中间成员
(在代码前面>前/代码>,或删除<代码>前面<代码>,那么您应该考虑
指向指针的指针:
BlockT** previousNext = &listHead;
BlockT* current = listHead;
while ( current != NULL ) {
// ...
previousNext = ¤t->next;
current = current->next;
}
在循环中,您可以通过*previousNext从列表中删除电流=
&当前->下一步
(请确保在删除前先执行当前
)
旧元素);要插入新元素,*previousNext=newblock;
上一步->下一步=当前代码>我喜欢你设置顶部块的方式,在底部从前到前设置,这样应该始终保持后面一个,看起来更干净。谢谢