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.
[ Parent
| on HN ]
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).
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.