頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


二次元配列を使ってみた

NSArrayじゃなくてfloat array[10]みたいな配列で二次元配列を使うってお話だよ。

こういう細かい動作確認を繰り返してると俺は何か根本的に間違えているんじゃないかな?ホントはNSArrayでもNSNumberを介さない方法やそもそもNSArrayじゃないけど数値をダイレクトに扱える配列なんかがあるんじゃないのか?って思っちゃうけど、まあいいや。まずは二次元配列を作って表示させてみたよ。

{
    float *twoDimArray[2];//二次元配列
    
    float array0[10] = { 1.23f , 2.34f };
    float array1[10] = { 3.45f , 4.56f };
    
    twoDimArray[0] = array0;
    twoDimArray[1] = array1;
    
    //---(A)
    NSLog(@"twoDimArray[0][0]=%f",twoDimArray[0][0]);
    NSLog(@"twoDimArray[0][1]=%f",twoDimArray[0][1]);
    NSLog(@"twoDimArray[1][0]=%f",twoDimArray[1][0]);
    NSLog(@"twoDimArray[1][1]=%f",twoDimArray[1][1]);

    //---(B)
    float *array;
    array = twoDimArray[0];
    NSLog(@"array[0]=%f",array[0]);
    NSLog(@"array[1]=%f",array[1]);
}
(A)のようにすれば確かに各要素にアクセスできる、と。
(B)のように一つの配列まるごとの参照をベースにしてもアクセスできる。

実際使う時には二次元配列から一つの配列を取り出してメソッド(関数)へ投げることが多いかな。こんな感じで:
{
    [self show2DArray:twoDimArray[0]];
    [self show2DArray:twoDimArray[1]];
}

-(void)show2DArray:(float *)array
{
    NSLog(@"array[0]=%f",array[0]);
    NSLog(@"array[1]=%f",array[1]);
}
もらう方は単に配列をもらうから前と同じだね(メソッド(関数)への引数にNSArrayじゃない配列を使う)。

あまりないかもしれないけど二次元配列をまるごとメソッドに投げる場合:
{
    [self show2DArrayAll:twoDimArray];
}

-(void)show2DArrayAll:(float **)array
{
    NSLog(@"array[0][0]=%f",array[0][0]);
    NSLog(@"array[0][1]=%f",array[0][1]);
    NSLog(@"array[1][0]=%f",array[1][0]);
    NSLog(@"array[1][1]=%f",array[1][1]);
}
*(アスタリスク)が二つ並んでいると気持ち悪いけど、とりあえずこれで動く。

同じようにC言語の関数っぽく書いてみるとこんな感じ:
{
    show2DArrayAll_C(twoDimArray);
}

//void show2DArrayAll_C(float** array)
void show2DArrayAll_C(float *array[])
{
    NSLog(@"---show2DArrayAll_C---");
    NSLog(@"array[0][0]=%f",array[0][0]);
    NSLog(@"array[0][1]=%f",array[0][1]);
    NSLog(@"array[1][0]=%f",array[1][0]);
    NSLog(@"array[1][1]=%f",array[1][1]);
}
呼ばれる側の引数部分は
float** array
で受けても動くんだけど
float *array[]
って書いた方がなんだか理解しやすいよね、、、って思うのは俺だけかな。

<< 輝度データ配列からUIImageViewを作る方法   TopPage  AdMobで自社広告をだしてみた >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/654-98babcbc




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad