_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
就像我可以更新的数组的别名,或者类似于第一段代码我应该怎么做?
由于
答案 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