home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / lang / c / 12919 < prev    next >
Encoding:
Text File  |  1992-08-29  |  2.0 KB  |  58 lines

  1. Newsgroups: comp.lang.c
  2. Path: sparky!uunet!destroyer!gatech!hubcap!mjs
  3. From: mjs@hubcap.clemson.edu (M. J. Saltzman)
  4. Subject: Re: pointer to multi D array. How?
  5. Message-ID: <1992Aug28.164452.14897@hubcap.clemson.edu>
  6. Organization: Clemson University, Clemson SC
  7. References: <RICHARD.92Aug27181915@CLYDE.ttt.kth.se> <28AUG199208202210@envmsa.eas.asu.edu> <1992Aug28.163945.14051@hubcap.clemson.edu>
  8. Date: Fri, 28 Aug 1992 16:44:52 GMT
  9. Lines: 47
  10.  
  11. In article <28AUG199208202210@envmsa.eas.asu.edu> ptran@envmsa.eas.asu.edu (Phi-Long Tran) writes:
  12. >In article <RICHARD.92Aug27181915@CLYDE.ttt.kth.se>, 
  13. >RICHARD@CLYDE.ttt.kth.se writes...
  14. >>In article <1992Aug26.050053.114348@zeus.calpoly.edu> 
  15. >clin@zeus.calpoly.edu (Chihtsung Jeffrey Lin) writes:
  16. >
  17. >>> ...  How do you declare a pointer to a multi-dimensional array?  [H]ere
  18. >>> is what I did.
  19. >>> int A[5][5]:={1,2,3,......}, **x;
  20. >
  21. >> Make that:
  22. >> int A[5][5]={1,2,3,.....}, *x;
  23. >
  24. >     Why not make an actual pointer to an array?  It may make references
  25. >easier to code.  For example, a pointer to the array A declared above would
  26. >be, "int (*ptrA)[5][5]".  Then we could reference array A with ptrA as:
  27. >
  28. >     ptrA = &A;         /* Assign ptrA the address of array A. */
  29. >     (*ptrA)[5][0] = 1;     /* (*ptrA) is the array A. */
  30. >
  31. >The pointer to the array, as in the above, is useful for dynamically
  32. >allocating multi-dimensional arrays or changes the starting address of any
  33. >array.
  34.  
  35. Actually, I think you want
  36.  
  37.     int A[5][5] = {...}, (*x)[5];
  38.  
  39. That makes x a pointer to the same type as an element of A, namely,
  40. an array of 5 ints.  Then 
  41.  
  42.     x = A;     /* equivalent to x = &A[0] */
  43.  
  44.     x[1][3] = 4;  /* equivalent to *(*(x + 1) + 3) = 4 */
  45.  
  46. are legal, and behave the way you would expect.
  47.  
  48. In response to another thread, I thought this was one of the hardest
  49. aspects of C to learn--not so much pointers, but the relationship between
  50. pointers and arrays (also the relationship between pointers and array
  51. parameters in function calls).
  52.  
  53.  
  54. -- 
  55.         Matthew Saltzman
  56.         Clemson University Math Sciences
  57.         mjs@clemson.edu
  58.