title: Warning: Expected ‘int **’ but argument is of type ‘int (*)[(sizetype)(n)]’
body: <p>Following code:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  
  void printSpiral(int **M, int row1, int row2, int col1, int col2) {
    if (!((row1 &lt;= row2) &amp;&amp; (col1 &lt;= col2)))
      return;
    int i;
    for (i = col1; i &lt;= col2; i++)
      printf("%d ", M[row1][i]);
    for (i = row1; i &lt;= row2; i++)
      printf("%d ", M[i][col2]);
    for (i = col2; i &gt;= col1; i--)
      printf("%d ",M[row2][i]);
    for (i = row2; i &gt;= row1; i--)
      printf("%d ",M[i][col1]);
    printSpiral(M,row1+1,row2-2,col1+1,col2-1);
  }
  
  int main() {
    int n;
    scanf("%d",&amp;n);
    int M[n][n];
    int i, j;
    for (i = 0; i &lt; n; i++)
      for (j = 0; j &lt; n; j++)
        scanf("%d",&amp;M[i][j]);
    printSpiral(M,0,n-1,0,n-1);
    return 0;
  }
  </code></pre>
  
  <p>gives following warning:</p>
  
  <pre><code>spiral.c: In function ‘main’:
  
  spiral.c:26:3: warning: passing argument 1 of ‘printSpiral’ from incompatible pointer     
  type [enabled by default]
  printSpiral(M,0,n-1,0,n-1);`
  
  spiral.c:3:6: note: `expected ‘int **’ but argument is of type ‘int (*)[(sizetype)(n)]’`
  void printSpiral(int **M, int row1, int row2, int col1, int col2) {
  </code></pre>
  
  <p>I have seen this warning for the first time. What does it mean?</p>