title: Why do you have to read a pointer declaration backwords in C?
body: <p>In the C language, for simple cases, it seems that in order to read pointer declarations you have to proceed backwards. For example:</p>
  
  <pre><code>int n; 
  int *p = &amp;n; // p is a pointer to int
  int *const np = &amp;n; // np is a const pointer to int
  int *const *npp = &amp;np; //npp is a (non-const) pointer to const pointer to (non-const) int
  </code></pre>
  
  <p>Even though the proper way to parse type declarations is through what is called <a href="http://c-faq.com/decl/spiral.anderson.html" rel="nofollow noreferrer">the spiral rule</a>, wouldn't it be easier if the parsing rules were different so as to accommodate a reading of simple pointer declarations the other way?
  For example:</p>
  
  <pre><code>int n;
  *int p = &amp;n; // p is a pointer to int
  const *int np = &amp;n; // np is a const pointer to int
  *const *int npp = &amp;np; // npp is a (non-const) pointer to const pointer to (non-const) int
  </code></pre>
  
  <p>So my question again: What were the principle behind such a design choice? What motivated the language designers to choose this particular way to declare types.</p>