vectores - pasar arreglos bidimensionales en c




Pasar matrices multidimensionales como argumentos de función en C (3)

En C, ¿puedo pasar una matriz multidimensional a una función como argumento único cuando no sé cuáles serán las dimensiones de la matriz?

Además, mi matriz multidimensional puede contener otros tipos que no sean cadenas.


Pase un puntero explícito al primer elemento con las dimensiones de la matriz como parámetros separados. Por ejemplo, para manejar matrices 2-d de tamaño arbitrario de int:

void func_2d(int *p, size_t M, size_t N)
{
  size_t i, j;
  ...
  p[i*N+j] = ...;
}

que se llamaría como

...
int arr1[10][20];
int arr2[5][80];
...
func_2d(&arr1[0][0], 10, 20);
func_2d(&arr2[0][0], 5, 80);

El mismo principio se aplica a las matrices de dimensiones superiores:

func_3d(int *p, size_t X, size_t Y, size_t Z)
{
  size_t i, j, k;
  ...
  p[i*Y*Z+j*Z+k] = ...;
  ...
}
...
arr2[10][20][30];
...
func_3d(&arr[0][0][0], 10, 20, 30);

Puede declarar su función como:

f(int size, int data[][size]) {...}

El compilador hará toda la aritmética del puntero por usted.

Tenga en cuenta que los tamaños de las dimensiones deben aparecer antes que la matriz misma.

GNU C permite el reenvío de declaraciones de argumentos (en caso de que realmente necesite pasar dimensiones después de la matriz):

f(int size; int data[][size], int size) {...}

La primera dimensión, aunque también puede pasar como argumento, es inútil para el compilador de C (incluso para el operador sizeof, cuando se aplica sobre la matriz pasada como argumento siempre se tratará como un puntero al primer elemento).


int matmax(int **p, int dim) // p- matrix , dim- dimension of the matrix 
{
    return p[0][0];  
}

int main()
{
   int *u[5]; // will be a 5x5 matrix

   for(int i = 0; i < 5; i++)
       u[i] = new int[5];

   u[0][0] = 1; // initialize u[0][0] - not mandatory

   // put data in u[][]

   printf("%d", matmax(u, 0)); //call to function
   getche(); // just to see the result
}




c