2016-06-24 12 views
2

コンピュータサイエンスのクラスでは、次のような割り当てがあります。ポインタを使用した配列の値の検索

与えられた128個の行と32個の列を含む二重の2次元配列。アレイは、メモリに互いに列を配置することによって格納される。配列の最初の要素へのポインタと、いくつかの列と行の値が返された正しい要素を返す次の関数を実行します。

#define N_COLUMNS 32 
#define N_ROWS 128 
static inline double get_element(const double *A, const int row, const int column) 
{... 
} 

これは私がこれまで行ってきたことですが、正しいとは思いません。

return *A + column * sizeof(double) + row * sizeof(double); 

誰かが私を助けることができますか?

+0

教師がCを教えていないと確信していますか? (そして、それはうまく教えられないかもしれません。) –

+0

型が 'double * A'の場合、' A'は二次元配列とはどういうのですか? – Codor

+0

'* sizeof(double)'が間違っているようです。 – MikeCAT

答えて

6

私の理解では、ゼロベースのインデックス付けを想定してポインタ演算を使用することで、次のような結果が得られます。

ここ
return *(A + (column * N_ROWS) + row); 

sizeof(double)Aが適切に入力されるように、使用する必要はありません。それに加算するとsummandをsizeof(double)倍進めるでしょう。

+2

これは良い答え、感謝のようです! – LvanRooij

1

試しA + COLUMN_NUMBER * COLUMN_SIZE + ROW_NUMBER

配列はこの計算を容易にするため、列0行0から始まり覚え

0

return文は、あなたが持っている実際に

return *(A + column * N_ROWS + row); 

のようになります。 N _COLUMNS * N_ROWS要素を格納し、N_ROWS要素のグループに分割された1次元配列。

static inline double get_element(const double *A, const int row, const int column); 

static inline double get_element(const double *A, int row, int column); 

が同等であるこれらの関数宣言のパラメータの行と列の

と修飾子constとして使用して宣言する必要がないことを考慮してください同じ1つの機能。

関連する問題