Path: utzoo!utgpu!watserv1!watmath!att!dptg!ulysses!andante!alice!ark From: ark@alice.UUCP (Andrew Koenig) Newsgroups: comp.lang.c Subject: Re: Koenig on pointers and arrays Message-ID: <10347@alice.UUCP> Date: 18 Jan 90 15:58:16 GMT References: <2804@bingvaxu.cc.binghamton.edu> Organization: AT&T Bell Laboratories, Liberty Corner NJ Lines: 51 In article <2804@bingvaxu.cc.binghamton.edu>, cjoslyn@bingvaxu.cc.binghamton.edu (Cliff Joslyn) writes: > "Only two things can be done to an array: determine its size and obtain > a pointer to element 0 of the array. *All* other array operations are > actually done with pointers, even if they are written with what look > like subscripts. That is, every subscript operation is equivalent to a > pointer operation, so it is possible to define the behavior of > subscripts entirely in terms of the behavior of pointers". > I presume this is accurate, and that e.g. passing an array as a > parameter or taking its address are considered array operations which > are actually done with pointers. In other words, is the first sentence > above literally accurate? On reading this sentence again, I still believe that it is literally accurate. For example: void f(int*); int a[10]; main() { f(a); } A casual way to think of this is that you're passing the array `a' to the function `f'. What's actually happening, though, is that the mere mention of the array `a' immediately yields a value that is the address of the initial (0th) element of `a'. Thus the call f(a); is precisely equivalent to the call f(&(a[0])); in which it is perhaps more readily visible that what is being passed is actually the address of an element. If I really wanted to split hairs, I could have added that you can take the address of an array (but only in an ANSI compiler). That would have confused the main point, though. I do explicitly take the address of an array on page 29 and again several times on page 31. I don't think of taking the address of an array as being an array operation, though. There's nothing special about the fact that it's an array. -- --Andrew Koenig ark@europa.att.com