home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / lang / c / 12480 < prev    next >
Encoding:
Text File  |  1992-08-18  |  2.0 KB  |  41 lines

  1. Newsgroups: comp.lang.c
  2. Path: sparky!uunet!uunet.ca!wildcan!sq!msb
  3. From: msb@sq.sq.com (Mark Brader)
  4. Subject: Re: I wish ANSI-C sizeof (void) == 1 (was Re: preprocessing subterfuge)
  5. Message-ID: <1992Aug18.144833.7579@sq.sq.com>
  6. Summary: Disagree.
  7. Organization: SoftQuad Inc., Toronto, Canada
  8. References: <BswME5.6Mp@research.canon.oz.au> <1992Aug14.195132.16700@crd.ge.com> <Bt5n8A.41B@research.canon.oz.au>
  9. Date: Tue, 18 Aug 92 14:48:33 GMT
  10. Lines: 29
  11.  
  12. >>> void * is the natural type to use when you're considering a
  13. >>> pointer to a chunk of memory that can hold any arbitrary type ...
  14. >>> And any time I need to do arithmetic on one, it's always in terms
  15. >>> of bytes ...
  16. >> If you need to do arithmetic on one, then the variable should not be
  17. >> declared as "void *" in the first place. That type is for pointing to
  18. >> objects whose size you don't know. ...
  19. > Yes, but I'm _not_ dealing with arrays of bytes. I'm pointing to arbitrary
  20. > locations which store as yet unknown types.
  21.  
  22. The last two quoted posters are both correct.  In ANSI C, it is specified
  23. that character types occupy one byte and that any object (i.e. a single
  24. declared variable, or the result of a single call to malloc()) is made up
  25. of bytes which can be (sorry, Steve) addressed linearly.  If you really
  26. have to do operations of the type just described, then you ARE viewing the
  27. object as an array of bytes, and char * (or unsigned char *, etc.) is the
  28. right type to use.  If you find this unpleasant, consider "typedef char byte".
  29.  
  30. Void * points with the same precision as char *, but is appropriate when you
  31. will be treating the object of unknown type as a WHOLE rather than as an
  32. array of bytes.  This is why it has ITS special properties: it can be freely
  33. converted without a cast to and from any other object pointer type, but you
  34. can't do address arithmetic on it.
  35. -- 
  36. Mark Brader            "You can't [compare] computer memory and recall
  37. SoftQuad Inc., Toronto         with human memory and recall.  It's comparing
  38. utzoo!sq!msb, msb@sq.com     apples and bicycles."        -- Ed Knowles
  39.  
  40. This article is in the public domain.
  41.