2017-10-03 8 views
1

私は2次元配列の誤解をしているだけで、私はそれを理解していません。フォーラムですべてをチェックして、これを解決する方法を見いだしましたが、役に立たなかったのです。個別の行と個別の列を取得するための2Dポインタの計算

私は2次元配列を持ち、findTile()関数を使ってポインタ演算を使って個々の行を取りたいと思っています。相応に、私はまた、列全体を取っていたいですか?

メソッドヘッダーはそのままで変更できません。タイルX(xは数字、タイルは単なる配列単位)を見つけると、方向(上、下、左、右)に沿って操作することができます。配列内のすべての周囲の値はそれに応じてシフトし、ラップします。だから、配列

[1][2][3] 
[4][5][6] 
[7][8][9] 

に「9アップ」

[1][2][6] 
[4][5][9] 
[7][8][3] 

を意味するだろう「3を残した」私だけのようにこれらの行を操作する方法を見つけることができるのであれば

[1][2][6] 
[4][5][9] 
[8][3][7] 

を意味しますそれは素晴らしいことですが、それが問題です。私は機能で私のfindTile()機能を使わなければならないし、私は '?'として示されているパラメータに何を割り当てることができないのか分からない。

static bool findTile(int tile, int rows, int cols, int grid[][cols], int *r, int *c) 
{ 
    for (int i = 0; i < rows; i++) 
    { 
     for (int j = 0; j < cols; j++) 
     { 
      if (grid[i][j] == tile) 
      { 
       r = grid[i]; 
       c = grid[j]; 
       return true; 
      } 
     } 
    } 
    return false; 
} 

bool moveLeft(int tile, int rows, int cols, int grid[][cols]) 
{ 
    findTile(tile, rows, cols, grid, ?, ?); 
} 

してくださいあなたは私にこのような問題に対処する方法についていくつかの洞察を与えるだろうと、多分、この問題を解決するためにそこにあるかのポインタ技術に私を啓発することができます。私はCであまり経験がありません。

+0

。 –

+0

'r = grid [i]; c = grid [j]; ' - >' * r = i; * c = j; '? – BLUEPIXY

+0

ステップ1は、Cが2D配列の使用方法を指定していないことを認識することです。行の次元と、2D配列の列の次元は、どれだけ指定する必要がありますか。 – Lundin

答えて

1

関数にポインタ引数を使用する方法と、そのような引数を関数に渡す方法の2つの問題があります。

まず、関数の引数int *rは整数へのポインタです。逆参照は、それが指す整数値を読み書きします。これとは対照的に、r = grid[i]のような "plain"を使用すると、ポインタは別の場所(この場合はi行目の最初の要素のアドレス)を指します。これはおそらくあなたが望むものではありません。あなたが*r = iを意味していたとします。iの値をrが指す場所に書き込みます。

第2に、関数を呼び出すときに関数が結果を書き込むことができる整数オブジェクトへのポインタを提供します。したがって

、それは次のようになります:* C *の参照渡しをエミュレートするためのいくつかの検索を行います

static bool findTile(int tile, int rows, int cols, int grid[][cols], int *r, int *c) { 
    ... 
    *r = 10; 
    ... 
    return true; 
} 

int main() { 

    int r=0, c=0; 
    findTile(... , &r, &c); // Note: & passes the address of integral objects r and c 
    // after that, r has the value 10 
} 
+0

これはわかりやすいですが、rに10を割り当てることは、私がここで達成しようとしていることではありません。私は行全体を取得しようとしています。これからの列全体私は、 'grid = 0 '= {3,1,2}' gridであれば、 'grid = 0'を指している' r = grid'と言うことができます。 r行全体を操作します。それが意味をなさないならば。 – compute

関連する問題