home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / lang / c / 11610 < prev    next >
Encoding:
Text File  |  1992-07-25  |  2.2 KB  |  73 lines

  1. Path: sparky!uunet!sun-barr!ames!agate!dog.ee.lbl.gov!horse.ee.lbl.gov!torek
  2. From: torek@horse.ee.lbl.gov (Chris Torek)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Array question....
  5. Date: 26 Jul 1992 01:50:57 GMT
  6. Organization: Lawrence Berkeley Laboratory, Berkeley
  7. Lines: 58
  8. Distribution: ca
  9. Message-ID: <24900@dog.ee.lbl.gov>
  10. References: <14ks9uINNgmj@agate.berkeley.edu> <22JUL199218153390@envmsa.eas.asu.edu>
  11. Reply-To: torek@horse.ee.lbl.gov (Chris Torek)
  12. NNTP-Posting-Host: 128.3.112.15
  13. Keywords: help?
  14.  
  15. >In article <14ks9uINNgmj@agate.berkeley.edu>,
  16. >mdr@ocf.berkeley.edu (Mike Rogoff) writes...
  17. >>... If you just malloc a bunch of space, can you reference it with
  18. >>array [] subscripts and have it work?
  19.  
  20. It is not *quite* like that:  malloc returns a value, and you have to
  21. store that value in some object in order to use it more than once.
  22. The type of this object determines what operations are legal, and the
  23. size you pass to malloc figures into how many subscripts, if any, are
  24. legal.  But this is essentially correct.
  25.  
  26.     char *p;
  27.  
  28.     p = malloc(300);
  29.  
  30. If p is not set to NULL, then p[0] through p[299] are all legal, and
  31. all produce an object of type `char'.
  32.  
  33.     int *q;
  34.  
  35.     q = malloc(10 * sizeof *q);
  36.  
  37. If q is not set to NULL, q[0] through q[9] are all legal, and all
  38. produce an object of type `int'.
  39.  
  40. For more information, see the FAQ.
  41.  
  42. In article <22JUL199218153390@envmsa.eas.asu.edu>
  43. ptran@envmsa.eas.asu.edu (Phi-Long Tran) writes:
  44. >     You want to declare a pointer to an array:
  45. >
  46. >     MyType (*paryMyType)[MAX_ELEMENTQ];
  47.  
  48. Probably not.  A pointer to an array can point to zero or more
  49. contiguous arrays, so that, e.g., you could write:
  50.  
  51.     paryMyType = malloc(6 * sizeof *paryMyType);
  52.  
  53. Now if paryMyType is not NULL, p[0] through p[5] are all legal, and
  54. all produce an object of type `array MAX_ELEMENTQ of MyType'.  Each
  55. of those array objects can in turn be subscripted, so if MAX_ELEMENTQ
  56. is at least 9, then
  57.  
  58.     paryMyType[3][4]
  59.  
  60. is legal and is an object of type `MyType'.
  61.  
  62. If you only wanted a single linear set of `MyType's, it would be
  63. simpler to write
  64.  
  65.     MyType *m;
  66.  
  67.     m = malloc(33 * sizeof *m);
  68.  
  69. Now if m is not NULL, m[0] through m[32] are all legal, etc.
  70. -- 
  71. In-Real-Life: Chris Torek, Lawrence Berkeley Lab CSE/EE (+1 510 486 5427)
  72. Berkeley, CA        Domain:    torek@ee.lbl.gov
  73.