2017-07-22 4 views
1

(それを修正するために)関数に修正配列を渡す:は、私は、共通の機能を記述する必要があることが定義されているいくつかの修正アレイを持って

uint8 myArray_A[3][5]; 
uint8 myArray_B[3][5]; 

void doThings(uint8 * in) 
{ 
    *in[0][0] = someValue_0 
    *in[0][1] = someValue_1 
} 

この機能私は別の関数で呼び出し、必要な配列を与えますそれまで:

void main(void) 
{ 
    doThings(myArray_A); 
} 

これは方法ですか?それは働くでしょうか?

+0

固定された2次元配列には必ず最初の次元のサイズが含まれていなければなりません。あなたが持っているものはコンパイルされません。 –

+0

申し訳ありませんが、それは第二の次元が必要です –

+0

言語は何ですか? C/C++のように見えます – pasbi

答えて

0

代わりにこれを行います。

uint8 myArray_A[3][5]; 
uint8 myArray_B[3][5]; 

void doThings(uint8 in[][5]) 
{ 
    in[0][0] = someValue_0 
    in[0][1] = someValue_1 
} 

寸法の大きさが変化する場合は、あなたが何らかの形でそれを渡す必要があり、率直に言って、マシンに依存しそうではない良いアイデアであるあなた自身の行列演算を、どうなる:

void doThings(uint8 * in, int dim1, int dim2) 
{ 
    in[0*dim2+0] = someValue_0 
    in[0*dim2+1] = someValue_1 
} 
0

関数は整数へのポインタをとります。これは、メモリ空間内の単一の整数の位置です。 これは、配列(配列内の最初の要素のアドレス - &myArray_A[0][0]のアドレス)にポインタを渡すと、配列のサイズであるmyArray_Aの定義に含まれていた構造情報が失われることを意味します。

しかし、これは、関数宣言で配列パラメータを指定することで修正できます。 これはどちらかvoid doThings(uint8[3][] in)

  • ボーナスtypedef int[3][5] my_array_tであなたの配列型を定義することによって、またはパラメータに配列のサイズを指定することによって行うことができます:あなたが1つの場所だけでサイズを更新して持つことができるように#defineあなたの配列サイズコード全体に変更が反映されます。
関連する問題