On 2007-10-05, Lawrence D'Oliveiro <[EMAIL PROTECTED]> wrote: > In message <[EMAIL PROTECTED]>, Neil Cerutti wrote: > >> On 2007-10-03, Lawrence D'Oliveiro <[EMAIL PROTECTED]> >> wrote: >>> In Python, all names _are_ variables. They are not "bound" to >>> objects. The value of os.path is a pointer. It's implemented >>> as a pointer, it has all the semantics of a pointer. >> >> No. A pointer is also an iterator. >> >> void duplicate(char *d, const char *s) >> { >> while (*d++ = *s++) >> ; >> } > > So if you can't do pointer arithmetic, then it's not a pointer? > Trying this: > > void duplicate(void *d, const void *s) > { > while (*d++ = *s++) > ; > } > > I get: > > test.c: In function 'duplicate': > test.c:3: warning: dereferencing 'void *' pointer > test.c:3: warning: dereferencing 'void *' pointer > test.c:3: error: invalid use of void expression > > So you can't do arithmetic or iterate with a void * pointer.
...or dereference. > Does that mean it's not really a pointer? That's an interesting taxonimical conundrum. If a pointer were defined by it's semantics, then yes, a void pointer wouldn't be a pointer. But pointers are defined not by behavior, but by an ANSI/ISO standard. The term "pointer to void" makes sense if you think of it as a pointer in an altered, intermediate state. I suppose you might score a Pyrrhic victory by claiming that Python identifiers are pointers that don't behave like pointers. But you claimed the opposite. -- Neil Cerutti -- http://mail.python.org/mailman/listinfo/python-list