質問の意図が不明瞭ですみませんでした。
2次元配列の例で説明しますと,例えば

int array1 = [N][M];
と配列で宣言した場合,これを引数に取る関数funcでarrayの要素を使うためには,
func (int i, int j, int array[][M]) {
  array[i][j]
}
と,あらかじめMを決めておかなければいけませんよね。
それに対して,

int **array2 = (int **)malloc(nrows * sizeof(int *));
  for(i = 0; i < nrows; i++) {
    array1[i] = (int *)malloc(ncolumns * sizeof(int));
  }
とポインタのポインタで確保した場合,
func (int i, int j, int **array2]) {
  array2[i][j]
}
と書いておけば,各要素[i][j]に正しくアクセスできるかどうか知りたいのです。