title: Does the C standard require the size of an array of n elements to be n times the size of an element?
body: <p>Does the C standard require that the size of an array of <em>n</em> elements be <em>n</em> times the size of an element, either by explicit statement or by rigorous logical deduction from its requirements?</p>
  
  <p>For example, could <code>int (*x)[5] = malloc(5 * sizeof **x);</code> fail to request sufficient space for an array of five <code>int</code>?</p>
  
  <p>C 2011 [N1570] 6.5.3.4 7 shows an example of computing the number of elements in an array as <code>sizeof array / sizeof array[0]</code>. However, examples are not a normative part of the standard (per paragraph 8 of the forward).</p>
  
  <p>6.2.5 20 says an array type describes a contiguously allocated nonempty set of objects with a particular type but is silent about the total memory required.</p>
  
  <p>This is solely a language-lawyer question; actual implementations are irrelevant. (To appease those who want concrete examples, hypothesize a C implementation that requires additional memory management for large arrays, so creating an array requires creating some additional data to help manage the memory.)</p>