title: C sizeof a passed array
body: <blockquote>
    <p><strong>Possible Duplicate:</strong><br>
    <a href="https://stackoverflow.com/questions/492384/how-to-find-the-sizeof-a-pointer-pointing-to-an-array">How to find the sizeof( a pointer pointing to an array )</a>  </p>
  </blockquote>
  
  
  
  <p>I understand that the sizeof operator is evaluated and replaced with a constant at compile time.  Given that, how can a function, being passed different arrays at different points in a program, have it's size computed? I can pass it as a parameter to the function, but I'd rather not have to add another parameter if I don't absolutely have to.</p>
  
  <p>Here's an example to illustrate what I'm asking:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  
  #define SIZEOF(a) ( sizeof a / sizeof a[0] )
  
  
  void printarray( double x[], int );
  
  int main()
  {
          double array1[ 100 ];
  
  
          printf( "The size of array1 = %ld.\n", SIZEOF( array1 ));
          printf( "The size of array1 = %ld.\n", sizeof array1 );
          printf( "The size of array1[0] = %ld.\n\n", sizeof array1[0] );
  
          printarray( array1, SIZEOF( array1 ) );
  
          return EXIT_SUCCESS;
  }
  
  
  void printarray( double p[], int s )
  {
          int i;
  
  
          // THIS IS WHAT DOESN"T WORK, SO AS A CONSEQUENCE, I PASS THE 
          // SIZE IN AS A SECOND PARAMETER, WHICH I'D RATHER NOT DO.
          printf( "The size of p calculated = %ld.\n", SIZEOF( p ));
          printf( "The size of p = %ld.\n", sizeof p );
          printf( "The size of p[0] = %ld.\n", sizeof p[0] );
  
          for( i = 0; i &lt; s; i++ )
                  printf( "Eelement %d = %lf.\n", i, p[i] );
  
          return;
  }
  </code></pre>