C language uses pass by value.
So, You have to receive the address of array as argument.
void change(int *, int);
int main(void) {
    int array[3] = { 1, 2, 3 };
    printf("%d", array[1]);
    change(array, 1);
    printf("%d", array[1]);
}
void change(int *array, int index) {
    *(array+index) = 4;
}
For the multi dimension, You should pass a size of column.
I made 2 samples as change and change2.
I think you can understand change well.
But, In case of change2, array has a head address of memory in array[2][3] and it has 6 integers by 2x3. So, you can calculate.
void change(int array[2][3], int, int, int);
void change2(int *, int, int, int, int);
int main(void) {
    int array[2][3] = { { 1, 2, 3 }, {4, 5, 6} };
    printf("%d", array[1][1]);
    change(array, 1, 1, 10);
    printf("%d", array[1][1]);
    change2((int *)array, 3, 1, 1, 20);
    printf("%d", array[1][1]);
}
void change(int array[2][3], int row, int col, int value) {
    array[row][col] = value;
}
void change2(int *array, int size_col, int row, int col, int value) {
    *(array + row*size_col + col) = value;
}