An example to illustrate:

```
#include <stdlib.h>
#include<stdio.h>

void simple_function(int s , int array[][s]);

int main(void){

int x;
/*Static 2D Array*/
int array[2][2];

/*Many Methods to Dynamically Allocate 2D Array....for example*/

/* Using Array of pointers*/
int *array1[2];
for(x=0;x<2;x++){array1[x] = calloc (2, sizeof(int));}

/*Using pointer to a pointer */
int **array2 = calloc (2, sizeof(int*));
for(x=0;x<2;x++){array2[x] = calloc (2, sizeof(int));}

/*Using a single pointer*/
int *array3 = calloc (4 , sizeof(int));

/* Codes To Fill The Arrays*/

/*Passing the Arrays to the function, some of them won't work*/
simple_function(2, array);  /*Case 1*/
simple_function(2, array1); /*Case 2*/
simple_function(2, array2); /*Case 3*/
simple_function(2, array3); /*Case 4*/

return 0;
}

void simple_function (int s, int array[][s]){

int x,y;

for(x=0;x<s;x++){
   for(y=0;y<s; y++){
    printf ("Content is %d\n", array[x][y]);
}
}
}

```

My Question:
Is there a way to write the signature of the simple\_function to let it accepts all cases regardless of the method that the user chose? If not, what is the most preferable for the function if I want to make a library?