0

有人知道为什么我从来没有得到我的数组的第一个值吗?它总是从索引 i+1 开始,当我在 0 开始 for 循环时,或者像这里一样在 1 :而不是 x=44,控制台说 x=100 :

//at the top
#define kMaxHillKeyPoints 5

//in the .h:
CGPoint _hillKeyPoints[kMaxHillKeyPoints];

- (void)generatePath {

    int _nVertices = 1;

    _hillKeyPoints[_nVertices] = CGPointMake(44, 0);
    _hillKeyPoints[_nVertices++] = CGPointMake(100, 75);
    _hillKeyPoints[_nVertices++] = CGPointMake(50, 150);
    _hillKeyPoints[_nVertices++] = CGPointMake(150, 225);

    for(int i = 1; i < 4; i++) {   
        CCLOG(@" _hillKeyPoints[1].x : %f", _hillKeyPoints[1].x);
        CCLOG(@"%i", i);
    }
}

//output :
_hillKeyPoints[1].x : 100.000000 //why not x = 44 ?

你知道为什么吗?我也清理了项目,但它没有改变任何东西。

谢谢

4

1 回答 1

2

首先,您执行了以下操作:

int _nVertices = 1;
_hillKeyPoints[_nVertices] = CGPointMake(44, 0); //_nVertices = 1

这将 _hillKeyPoints[1] 分配给 (44,0)。在这里,你还是不错的(你可以在这里用NSLog来验证)。

但是,在以下声明中:

_hillKeyPoints[_nVertices++] = CGPointMake(100, 75);

您正在增加_nVertices。这意味着 _hillKeyPoints[_nVertices] 首先分配给 (100,75),然后值 _nVertices 递增。上面的语句完全等同于这样做:

_hillKeyPoints[_nVertices] = CGPointMake(100, 75); 
_nVertices = _nVertices + 1;

请注意,在分配期间这里 _nVertices = 1,因此您将覆盖之前的 (44, 0) 分配,因此最终会得到 _hillKeyPoints[1] = (100,75)。

如果您仍想按照自己的方式进行操作,则可以每次都预先增加索引:

int _nVertices = 1; 
_hillKeyPoints[_nVertices] = CGPointMake(44, 0); //_nVertices = 1
_hillKeyPoints[++_nVertices] = CGPointMake(100, 75); //_nVertices = 2
_hillKeyPoints[++_nVertices] = CGPointMake(50, 150); //_nVertices = 3
_hillKeyPoints[++_nVertices] = CGPointMake(150, 225); //_nVertices = 4

希望这可以帮助。

于 2012-07-02T07:08:01.610 回答