News for hackers. Stuff that matters.
Re:Learn C The Hard Way by sausagefeet on Saturday July 02, 2011 @11:04PM (#2722958)
I find it is much more helpful, when teaching C, to avoid the word 'address', and call (&) the pointer-to operator. Thinking of pointers as numbers (which the address-analogy does) tends to be harmful for newer C programmers because they want to treat them like numbers.
Re:Learn C The Hard Way by palish on Saturday July 02, 2011 @11:13PM (#2722977)
They are numbers (either 32-bit or 64-bit). Nothing more, nothing less. I don't understand why you wouldn't want to think of them that way.

For example...

  const char* current = "ohai thar";
  const char* end     = current + strlen( current );

  assert( end >= current );
  size_t bytecount = (end - current);
(size_t is an unsigned type, so if 'end' is less than 'current', it will overflow. If you want to allow for that, use ptrdiff_t.)
Re:Learn C The Hard Way by sausagefeet on Monday July 04, 2011 @01:41AM (#2725515)
No, they aren't numbers. The standard is quite clear on this. Consider old DOS architecture where you had a section and offset. Your code is also not well-defined C. C only lets you perform subtraction between two pointers in the same block, this code is at best implementation defined and worst undefined (I can't remember).
Re:Learn C The Hard Way by __rkaup__ on Sunday July 03, 2011 @12:51AM (#2723100)
You'd still need to explain pointer arithmetic somehow.
Re:Learn C The Hard Way by sausagefeet on Monday July 04, 2011 @01:48AM (#2725529)
That is easy since pointer arithmetic is only valid inside a contiguous block. You don't need to talk about it in terms of a pointer being a number at all.