C++ 将两个指针初始化到“中的相同值”;至于;环

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

我正在使用一个链表,并试图初始化两个指针,这两个指针等于“first”/“head”指针。我试图在
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 = &current->next;
    current = current->next;
}
在循环中,您可以通过
*previousNext从列表中删除电流=
&当前->下一步
(请确保在删除前先执行当前
) 旧元素);要插入新元素,
*previousNext=newblock;

上一步->下一步=当前

我喜欢你设置顶部块的方式,在底部从前到前设置,这样应该始终保持后面一个,看起来更干净。谢谢