0

配列の最初の値を取得できない理由を誰かが知っていますか?それは常にインデックスi+1で始まり、forループを0で開始するとき、またはここのように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 に答える