Hola, mi duda surge mientras hacia un examen de programación. El caso es que el ejercicio pedía calcular el determinante de una matriz cuadrada de orden DIM (tabla bidimensional declarada como: int matriz [DIM][DIM] ). DIM es una constante simbólica.
La matriz se pasaba a una función determinante ejemplo : printf("Determinante de matriz: %d\n", determinante(matriz))
En la declaración de la funcion determinante que sería lo correcto;
¿int determinante (int matriz[ ][DIM] ); o
int determinante (int * matriz); sabiendo que una tabla bidimensional se almacena en memoria por filas y usando notación de punteros con 2 indices? ¿Por qué?
Graciass! espero respuesta :)
Se quieres usar una matriz en el 'stack' y usar el metodo para diferentes tamaños, entonces tiene que hacer asi:
void function(int * m, int lineas, size_t columnas)
{
int i = 0;
int j = 1;
m[i*columnas + j] = 5;
}
int main()
{
int a1[10][20];
int a2[40][30];
function(&a1[0][0], 10, 20);
function(&a2[0][0], 40, 30);
}
en el caso de que se puede usar la asignación dinámica, enton puede leer esto: http://foro.elhacker.net/programacion_cc/duda_con_arreglo_bidimensional_dinamico_en_ide_devc-t337905.0.html;msg1658904#msg1658904
Finalmente, se el tamaño de el matriz es constante em tiempo de compilación, entonces se puede:
void function(int m[][DIM])
o
void function(int m[DIM][DIM])
Cuando se declara una funcion en la forma:
int fn(char a[]) ...
/* O tambien */
int fn(char a[N]) ...
En realidad se procesa como:
int fn(char *a) ...
Es por ello que indicar el numero de elementos en el array (el parametro "a") no es necesario.
Un saludo