4

是否可以使用 -- 或 ++ 运算符更改我当前结构的地址,即:

mystruct* test = existing_mystruct;
test++ // instead of using: test = test->next_p;

我试图使用它,但它似乎是 const 并给了我一个错误:分配给这个(不合时宜):

struct mystruct {
    mystruct* next_p;
    mystruct* prev_p;

    void operatorplusplus  () { this = next_p; }
    void operatorminusminus() { this = prev_p; }
};
4

2 回答 2

4

对象在存在时在内存中具有恒定地址。但是,您可以将它们复制到新地址。

您尝试做的是在链表中前进。如果您重载它们,则可以使用这些运算符完成。但是您需要在一个特殊的句柄类中定义它来包裹列表节点。

编辑

我描述的代码看起来有点像这样:

class mylist
{
  struct mynode
  {
    //data
    mynode* next;
    mynode* prev;
  } *curr;

public:
 mylist& operator++() {curr = curr->next; return *this;}
};

当然,您会想要进行边界检查等,但这是一般的想法。

于 2012-10-05T17:15:42.163 回答
1

No.this指针的类型是mystruct * const,这意味着它的地址是不可更改的。

于 2012-10-05T17:16:21.053 回答