C ++指针问题

时间:2010-03-21 16:01:37

标签: c++ pointers

_stuckVertices是一个指针数组,我想更新该数组的一个索引而不使用_stuckVertices[ (row * _cols) + column ] 3次。它是一个指针数组的原因是因为绝大多数时候指针都是NULL。以下代码有效,但每次使用时都需要取消引用:

void Cloth::stickPoint(int column, int row)
{
    Anchor **a = &_stuckVertices[ (row * _cols) + column ];
    if (!*a)
        *a = new Anchor(this, column, row);
    (*a)->stick();
}

我原来是这样写的,但_stuckVertices指针没有更新:

void Cloth::stickPoint(int column, int row)

    {
        Anchor *a = _stuckVertices[ (row * _cols) + column ];
        if (!a)
            a = new Anchor(this, column, row);
        a->stick();
    }

有没有办法写Anchor *a = _stuckVertices[ index ],以便a就像我可以更新的数组的别名,或者类似于第一段代码我应该怎么做?

由于

2 个答案:

答案 0 :(得分:4)

您正在寻找参考文献 - 它们是别名:

Anchor*& a = _stuckVertices[ (row * _cols) + column ];
if (!a)
    a = new Anchor(this, column, row);
a->stick();

答案 1 :(得分:-1)

  

_stuckVertices是一个指针数组

这是什么意思? oyu是这样创建的: Anchor * _stuckVertices = new Anchor [Number]; 或者像这样: Anchor * _stuckVertices [Number] = {0}; ?

在第一种情况下,您应该可以这样做:

Anchor *a = _stuckVertices +((row * _cols) + column);
a->stick();

在第二种情况下:

Anchor *a = _stuckVertices[((row * _cols) + column)];
a->stick();

只是一个提示,(row * _cols)+列可能比array-length更大 在访问_stuckVertices之前,您至少应该添加一个断言,例如:

#include <cassert>
assert (sizeof(_stuckVertices)/sizeof(_stuckVertices[0]) > ((row * _cols) + column) );

此致 Valentin Heinitz