2009-06-28 4 views

答えて

1

行列の最初の要素とそのサイズにポインタを渡します。

2

行列は一定のサイズであることがわかっているので、タスクはダブルポインタ(ここではchar**)を関数に渡すのと同じくらい簡単です。これは渡される行列を参照しています。

しかし、渡された行列の行/列が不明な場合、Cはメモリ内の配列のサイズをトラッキングしないため、次元を渡す必要があります(構文上の砂糖を指すポインターではありません)。

+0

これは、彼の行列が配列へのポインタの配列と呼ばれていると仮定していますが、ちょうどその配列が規則的な連続した2次元配列 – newacct

3

memcpy関数のマトリックスの内容をコピーすることができます。

/* 
* mat: matrix to duplicate. 
* rows: rows in mat. 
* cols: cols in mat. 
*/ 
void matdup(char mat[][],size_t rows,size_t cols){ 

    char dupmat[rows][cols];//duplicate matrix in stack. 

    memcpy((void*)dupmat,(void*)mat,rows*cols); 

    //do stuff with matrix here. 
} 

これで、matdup関数内で使用する新しい行列を作成できます。

+1

+1です。 「void *」にキャストする必要はありませんが、 – Christoph

関連する問題