Manipular matriz multidimensional en una función.

Leí muchas cosas aquí e intenté muchas, pero no pude encontrar una manera de pasar una matriz multidimensional a una función en C, cambiar algunos de los valores y de alguna manera devolver la nueva matriz. Es importante encontrar una manera de pasar esa matriz a otra función y hacer lo mismo.

Me gustaría encontrar una forma de pasar la matriz a una función. Luego, pásela de la primera función a la segunda, haga algo allí (tal vez imprima, quizás cambie los valores), luego úsela de nuevo a la primera función y finalmente use Esa matriz en main.

Mi último intento es:

void func(int multarray[][columns]){
    multarray[0][0]=9;
}

int main(){
    int rows;
    int columns;
    int multarray[rows][columns];
    func(multarray);
    return 0;
}

También probé esto:

void func(int multarray[rows][columns]){
    multarray[0][0]=9;
}

int main(){
    int rows;
    int columns;
    int multarray[rows][columns];
    func(multarray);
    return 0;
}

También probé esto:

int
getid(int row, int x, int y) {
          return (row*x+y);
}

void
printMatrix(int*arr, int row, int col) {
     for(int x = 0; x < row ; x++) {
             printf("\n");
             for (int y = 0; y <col ; y++) {
                 printf("%d  ",arr[getid(row, x,y)]);
             }
     }
}

main()
{

    int arr[2][2] = {11,12,21,22};
    int row = 2, col = 2;

    printMatrix((int*)arr, row, col);

}

desdeaquí

También probé los punteros dobles. También leí que hay un enfoque diferente si el compilador no admite VLA. Estoy usando gnu.

Respuestas a la pregunta(4)

Su respuesta a la pregunta