Ciao,

A parte le considerazioni personali su quale sia il codice migliore, il primo che hai mostrato è tecnicamente corretto. Che errore ti da? Perchè dici che non funziona?

Ho scritto un esempio al volo e funziona perfettamente.

codice:
#include <stdio.h>
#include <stdlib.h>

void funz( int mat[4][4] ) 
{
     int i,j;
	
    for (i=0;i<4;i++)
    {  for (j=0;j<4;j++)
            printf("%2d",mat[i][j]);
       printf("\n");  
       }
   
   return ;       
}


int main() 
{
    int mat[4][4];
    int i,j;
     
    for (i=0;i<4;i++)          // carica la matrice
      for (j=0;j<4;j++)
        mat[i][j]=rand()%10;
      
    funz(mat);        // stampa la matrice
	
    system("Pause");
    return 0;
}