title: In numba, what's the difference between array(float64, 1d, C) and array(float64, 1d, A)?
body: <p>I have two simple and similar functions. One can compile with numba while the other can't. I can't understand the difference between them.The following are these two functions:</p>
  <p>The first one:</p>
  <pre><code>@nb.njit(float64[:](float64[:], float64[:]))
  def arrAdd(a,b):
      assert a.shape == b.shape
      return a + b
  </code></pre>
  <p>It succeed in compiling. When I call it,</p>
  <pre><code>arrAdd(np.array([1,2.0,21]),np.array([2,3.0,1]))
  </code></pre>
  <p>It will return:</p>
  <pre><code>array([ 3.,  5., 22.])
  </code></pre>
  <p>The second one:</p>
  <pre><code>c = np.array([1,2.0,21])
  @nb.njit
  def arrAdd1(arr):
      return arrAdd(arr,c)
  </code></pre>
  <p>However, when I call this function:</p>
  <pre><code>arrAdd1([2,3.0,1])
  </code></pre>
  <p>it will show:</p>
  <pre><code>TypingError: Failed in nopython mode pipeline (step: nopython frontend)
  Invalid use of type(CPUDispatcher(&lt;function arrAdd at 0x00000212A9FDC670&gt;)) with parameters (array(float64, 1d, C), readonly array(float64, 1d, C))
  Known signatures:
   * (array(float64, 1d, A), array(float64, 1d, A)) -&gt; array(float64, 1d, A)
  During: resolving callee type: type(CPUDispatcher(&lt;function arrAdd at 0x00000212A9FDC670&gt;))
  During: typing of call at &lt;ipython-input-57-c77e552c5560&gt; (4)
  
  
  File &quot;&lt;ipython-input-57-c77e552c5560&gt;&quot;, line 4:
  def arrAdd1(arr):
      return arrAdd(arr, c)
      ^
  </code></pre>
  <p>So what's the difference between  array(float64, 1d, C)) and array(float64, 1d, A)?</p>