title: Array are passed by value or by reference?
body: <p>I know for sure that</p>
  
  <pre><code>function(int *a); function(int a[]);
  </code></pre>
  
  <p>in C are the same, function(int a[]) will be translated into function(int *a)</p>
  
  <pre><code>int *a = malloc(20);
  int b[] = {1,2,3,4,5};
  </code></pre>
  
  <p>These two are not the same, the first is a pointer, the second is an array. What happens when I call function(b)?(function(int *a))
  I know that b is on the stack, so how is passed to that function?</p>
  
  <p>Secondly, strings:</p>
  
  <pre><code>char *c1 = "string";
  char c2 [] = "string";
  </code></pre>
  
  <p>In this case I don't know where is c1, and I suppose that c2 is on the stack.
  Suppose that function now is: function(char *c), which is the same as function(char c[]), what happens when I call function(c1), and function(c2), the strings will be passed by reference or value?</p>