title: Understanding passing addresses to functions and also functions returning pointers
body: <p>I'm trying to understand functions pass by reference and functions returning pointers. i have a following code which throws compile time error: </p>
  
  <blockquote>
    <p>"error: incompatible type for argument 1 of `jamboree'";</p>
  </blockquote>
  
  <p>here is the code i'm trying to compile.</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  main () {
  
  float p = 23.5, *q;
  float jamboree(float);
  q = &amp;p;
  printf ("before call = %d\n", q);
  q = jamboree(&amp;p);
  printf ("after call = %d\n", q);
  
  }
  float jamboree(float *i){
  i = i + 1;
  return(i);
  }
  </code></pre>
  
  <p>the same code modified for "Functions returning pointers" which works fine:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  main () {
  
  float p = 23.5, *q;
  float *jamboree(float *);
  q = &amp;p;
  printf ("before call = %d\n", q);
  q = jamboree(&amp;p);
  printf ("after call = %d\n", q);
  
  }
  float *jamboree(float *i){
  i = i + 1;
  return(i);
  }
  </code></pre>
  
  <p>output for above code is:</p>
  
  <pre><code>before call = 2673932
  after call = 2673936
  </code></pre>
  
  <p>Q1. why do i get incompatible type for argument 1 for the first code (which is pass by referance).</p>