Path: csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!border3.nntp.dca.giganews.com!Xl.tags.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!local2.nntp.dca.giganews.com!nntp.earthlink.com!news.earthlink.com.POSTED!not-for-mail NNTP-Posting-Date: Mon, 20 Feb 2012 21:53:12 -0600 Message-ID: <4F431529.1491@mindspring.com> Date: Mon, 20 Feb 2012 22:53:13 -0500 From: pete Reply-To: pfiland@mindspring.com Organization: PF X-Mailer: Mozilla 3.04Gold (WinNT; I) MIME-Version: 1.0 Newsgroups: comp.lang.c Subject: Re: Arrays Vs Pointers References: <4F42C9FB.2597@mindspring.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 72 X-Usenet-Provider: http://www.giganews.com NNTP-Posting-Host: 4.154.221.31 X-Trace: sv3-KpkF888JgvwL1ZkGkyjNUPtQw4Dpvcuxu5RQOivjbcsjT6iSOUoEes8WwBpBtubcHs9I0jiZfJhNv/U!8qMnBw0EwnISzwSRjLK35WCoxDQmO71EDkx49fekYQd+GmcNMbWW865aQEpSJzUAKUctDazwxsVX!520wgrX1mQ== X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.3.40 X-Original-Bytes: 3729 Xref: x330-a1.tempe.blueboxinc.net comp.lang.c:17725 Keith Thompson wrote: > > Keith Thompson writes: > > pete writes: > >> Keith Thompson wrote: > >>> Willem writes: > >>> > peter wrote: > >>> > ) I am currently exploring the world of pointers and have encounter some > >>> > ) inconsistent information regarding the best way to reference an > >>> > ) array: array[1] OR *(array +1). > >>> > ) > >>> > ) One book says that you should not use the syntax array[1] because > >>> > ) of performance reason. > >>> > > >>> > That book is completely and utterly wrong. > >>> > In C, "array[index]" is *exactly the same* as "*(array + index)" > >>> > I would go so far as to call it syntactic sugar. > >>> > Hell, it's even commutative. "array[index]" means the same as "index[array]" ! > >>> [...] > >>> > >>> Yes, but I doubt that that's what the book actually said. > >> > >> Teach Yourself C, > >> by Herbert Schildt, copyright 1990, > >> Chapter 6.3, Use Pointers With Arrays, > >> page 197: > >> > >> For somewhat complex reasons, > >> a C compiler will generally create faster executable code > >> for an expression such as > >> > >> *(p+3) > >> > >> than it will for the comparable array index > >> > >> p[3] > > > > Had I known it was one of Schildt's books, I wouldn't have assumed > > that it said something sensible. (Do we know that that's the book to > > which peter was referring?) I don't know, but for some reason I remembered reading it a long time ago. > > Willem is right: the book is completely and utterly wrong. > > There's probably a valid point somewhere in the vicinity of what > > Schildt wrote (as I discussed upthread), but Schildt missed it. > > Let me amend that slightly. It's possible that some compilers might > generate faster code for *(p+3) than for p[3]. There's no good reason > for that, since the two expressions are equivalent by definition, but > it's possible. It's also possible Schildt encountered such a compiler > and reached an overly general conclusion. I recall a thread about a year or so ago, where the controling expression in a loop was shown to have been rendered with a register, when {!= 0} was omitted. That is to say that there was a compiler for which while (x) was faster than while ((x) != 0) I think it was a gcc compiler and I remember being disappointed that the compiler had translated two semantically equal expressions differently. -- pete