solución C:
En C no se puede omitir tamaño de la matriz (excepto más a la izquierda) cuando se pasa como parámetro de la función.
Se puede escribir: int a []
pero no puede: int a [] []
sólo por ejemplo: int a [] [20]
Este la restricción está aquí, porque el compilador necesita determinar los desplazamientos adecuados para acceder a los elementos de la matriz. Sin embargo, puede hacerlo de esta manera:
void print_arbitrary_2D_array(void *arr, int y, int x)
{
/* cast to 2D array type */
double (*p_arr)[y][x] = (double (*)[y][x]) arr;
int i, j;
for (i = 0; i < y; ++i) {
for (j = 0; j < x; ++j)
printf(" %lf", (*p_arr)[i][j]);
putchar('\n');
}
}
double arr_1[4][3] = {
{ 3.3, 5.8, 2.3 },
{ 9.1, 3.2, 6.1 },
{ 1.2, 7.9, 9.4 },
{ 0.2, 9.5, 2.4 }
};
double arr_2[2][5] = {
{ 3.6, 1.4, 6.7, 0.1, 4.2 },
{ 8.4, 2.3, 5.9, 1.4, 8.3 }
};
print_arbitrary_2D_array(arr_1, 4, 3);
putchar('\n');
print_arbitrary_2D_array(arr_2, 2, 5);
int ** matrix sería la sintaxis que está buscando. –
Si va a hacer que las personas pasen una matriz de tamaño arbitrario, haga que también pasen el número de filas y columnas. O, como alternativa, utilice 'std :: vector>' –
birryree
@SteveHoward Una matriz 2D no se descompone en puntero a un puntero en C++. – Mahesh