2012-02-17 3 views
0

私はiOSアプリケーションでIDの2D C配列を使用しています。これを客観的C法で返すことは可能ですか?代わりの解決法として、私は整数の2D C配列へのポインタを返そうとしましたが、2D-int配列を変更することはできません。私は、2D-アレイのObjective-Cのクラスを作成する必要があることなど、Objective-CでタイプIDの2D C配列を返す

- (int (*)[8][8])board:(Piece *)piece 
{ 

    int (*layout)[8][8] = malloc(8 * 8 * sizeof(int)); 

    //Cannot modify layout 2D C array 

    return layout; 
} 

私はObjective-Cの中にいくつかの経験を持っていますが、継続的にC 2Dアレイを使用して問題に実行するC.アムでどれも私がそう? iOSデベロッパーが使用するより典型的なアプローチは何ですか?

+0

: )Cチュートリアルを試してみてください。 Obj-Cを理解するのに役立ちます。 – Sulthan

答えて

1
- (int **)board:(Piece *)piece 
{ 

    int **layout = malloc(8 * sizeof(int *)); 
    for(int i=0; i<8; i++) 
     layout[i] = malloc(8 * sizeof(int)); 


    return layout; 
} 

最後にメモリを解放することを忘れないでください。また、あなたはまた、同様の方法でそれにアクセスするには、このように1次元配列と何かを使用することができます。

#define access(array, x, y) array[y * 8 + x] 

ありも今のObjective-Cでの多次元配列クラスにドロップされますが、作成することができますその中の他のNSArray年代とNSArray、または、他の誰かがこれをしなかった場合、Google(私は少なくとも1回の実施を覚えているが、その名前を思い出すことができない)

0

あなたがint (*layout)[8][8] = malloc(8 * 8 * sizeof(int));を宣言した後、あなたが(*layout)[x][y]=val;のような値を変更することができますが。しかし、int (*layout)[8]を宣言することをお勧めします。単純にlayout[x][y]=valで要素にアクセスできます。

編集:私はObjective-Cのことは知らないが、Cには、私が示唆された機能は次のようになります。私は常に人々は、いくつかのCの経験なしのObj-Cでプログラムすることができますか疑問

int (*newarray())[8] { 
int (*l)[8]=malloc(64*sizeof(int)); 
// You can do stuff like l[2][4]=15 here 
return l; 
} 
関連する問題