2017-10-31 8 views
0

1D固定配列を2Dポインタ関数に渡す方法はありますか?私は1Dポインタ配列を渡すことが分かります。1D固定配列を2Dポインタ関数に渡す

void prettyPrintMatrix_float(float **matrix, int rows, int cols){ 
    int i, j; 

    for (i = 0; i<rows; i++){ 
     for (j = 0; j<cols; j++){ 
      printf("%10.3f", matrix[i][j]); 
     } 
     printf("\n"); 
    } 
    return; 
} 

float myArray[10] = {0.0f}; 
float* myPointerArray = (float*)malloc(sizeof(float) * 10); 
prettyPrintMatrix_float(&myPointerArray, 1, 10); // Works 
prettyPrintMatrix_float(&myArray, 1, 10); // ERROR 
prettyPrintMatrix_float(&(myArray[0]), 1 , 10); ERROR 

私はこれを回避する方法について考えることはできません。私が考えることができるのは、新しい機能を作り出すことだけです。私はむしろそうではない場合、私はむしろそうしたいと思います。

+0

'float * myPointerArray = myArray; prettyPrintMatrix_float(&myPointerArray、1,10); '? @EugeneSh。 –

+0

私は今あなたにキスすることができます。あなたはうその犬。あなたが甘いカルマをしたいなら、答えとしてそれを書いてください。 – user14492

+0

代わりに2D配列を使用できない理由はありますか? https://stackoverflow.com/questions/42094465/correctly-allocating-multi-dimensional-arrays – Lundin

答えて

0

あなたがしようとしていることはできません。float**float*でもなく、同じメモリレイアウトでもありません。

最初のポインタはfloatへのポインタです。つまり、最初の参照解除によってポインタが生成され、一方、float*では直接値が取得されます。

float**を取得するには、float*のアドレスを使用することができますが、それはあなたが推測したいことではありません(rowsはささいなことです)。

float get(float* data, float x, float y, float w) { 
    return data[y*w + x]; 
} 

すべてがfloat*中心に展開できるように、単一の方法で、2Dおよび1D両方の配列を管理する方法は常にfloat*を有し、二次元、例えば、正しい要素を得るために特別な機能を使用することです。

関連する問題