Otra forma de pasar el arreglo bidimensional por referencia (accediendo como C/C++ lo almacenan en memoria) es:
Código
// mat como puntero al primer elemento del arreglo void cargar3(int *mat, int cols, int rows) { int c, r; for(r = 0; r < rows; r++) for(c = 0; c < cols; c++) mat[r * cols + c] = r + c; }
esto es unidimensional.