title: Difference between passing array, fixed-sized array and base address of array as a function parameter
body: <p>I am confused about which syntax to use if I want to pass an array of known or unknown size as a function parameter.</p>
  
  <p>Suppose I have these variants for the purpose:</p>
  
  <pre><code>void func1(char* str) {
      //print str
  }
  
  void func2(char str[]) {
      //print str
  }
  
  void func3(char str[10]) {
      //print str
  }
  </code></pre>
  
  <p>What are the pros and cons of using each one of these?</p>