title: Bytewise reading of memory: "signed char *" vs "unsigned char *"
body: <p>One often needs to read from memory one byte at a time, like in this naive <code>memcpy()</code> implementation:</p>
  
  <pre><code>void *memcpy(void *dest, const void *src, size_t n)
  {
      char *from = (char *)src;
      char *to   = (char *)dest;
  
      while(n--) *to++ = *from++;
  
      return dest;
  }
  </code></pre>
  
  <p>However, I sometimes see people explicitly use <code>unsigned char *</code> instead of just <code>char *</code>. </p>
  
  <p>Of course, <code>char</code> and <code>unsigned char</code> may not be equal. But does it make a difference whether I use <code>char *</code>, <code>signed char *</code>, or <code>unsigned char *</code> when bytewise reading/writing memory?</p>
  
  <p><strong>UPDATE:</strong> Actually, I'm fully aware that <code>c=200</code> may have different values depending on the type of <code>c</code>. What I am asking here is why people sometimes use <code>unsigned char *</code> instead of just <code>char *</code> when reading memory, e.g. in order to store an <code>uint32_t</code> in a <code>char[4]</code>.</p>