title: When did constant 0 in pointer context acquire its special status?
body: <p>As you know, in standard modern C language the constant 0 value used in pointer context acts as a <em>null-pointer constant</em>, which gets converted to a platform-specific (and possibly even type-specific) <em>null-pointer value</em>.</p>
  
  <p>Meanwhile, the early versions of C language, as the one described in <a href="http://cm.bell-labs.com/cm/cs/who/dmr/cman.pdf" rel="noreferrer">C Reference Manual</a>, did not make much of a distinction between pointer and integer contexts, allowing one to freely compare and assign integers to pointers. If am not mistaken, in that version of C the constant 0 had no special status, meaning that assigning the value of constant 0 to a pointer would simply make it point to physical address 0 (just like assigning the value of 42 to a pointer would make it point to physical address 42).</p>
  
  <p>In ANSI C things have changed significantly. Now assigning the constant 0 to a pointer will place some platform-specific <em>null-pointer value</em> into that pointer. Null-pointer value is not required to be represented by physical 0 value.</p>
  
  <p>So, at what point in the history of C language did it change from one to another? Did K&amp;R C already incorporate the higher-level concept of null-pointer with constant 0 given its special status? Or did the K&amp;R C still guarantee physical assignment of integers to pointers even for constant 0? </p>