Manipular array multidimensional em uma função

Eu li um monte de coisas aqui e tentei muitos, mas não consegui encontrar uma maneira de passar um array multidimensional para uma função em C, alterar alguns dos valores e de alguma forma retornar o novo array. É importante encontrar uma maneira de passar essa matriz para outra função e fazer a mesma coisa.

Eu gostaria de encontrar uma maneira de passar a matriz para uma função.Em seguida, passá-lo da primeira função para um segundo, faça algo lá (talvez imprimir, talvez alterar valores), use-o novamente para a primeira função e finalmente use essa matriz no principal.

Minha última tentativa é:

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

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

Eu também tentei isso:

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

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

Eu também tentei isso:

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);

}

deAqui

Eu também tentei ponteiros duplos. Também li que existe uma abordagem diferente se o compilador não suportar VLAs. Eu estou usando o gnu.

questionAnswers(4)

yourAnswerToTheQuestion