[comp.lang.c] Another

dg@lakart.UUCP (David Goodenough) (04/28/89)

From article <2459@nmtsun.nmt.edu>, by kelly@nmtsun.nmt.edu (Sean Kelly):
> My CS instructor and I disagree about a certain moot point.  I have a text
> book which says that
> 
> 	*(a + i)	and	a[i]
> 
> are equivalent, given an array a, and int index i ... each gives the
> value stored in a[i].  But he says that
> 
> 	*(a + i)
> 
> is non-standard and would not expect it do go far on all _real_ C compilers
> (_real_ meaning those compilers that are somewhat devoted to K & R or ANSI).

Your CS professor is talking out the back of his neck. This is _EXTREMELY_
standard: any compiler that can't do that is going to get in real trouble,
real fast. Ask your CS prof for his words of wisdom on:

	int *b;

	b++;

Then ask him about:

	int *b;

	b = b + 1;

> He expects that many compilers would instead add the value of i to the
> pointer a, and then reference the item stored there.

Not quite - it adds i * sizeof(*a) to a. i.e. just what happens when you do
a[i]. Get him to look at the following code segment:

	int a[100], i;

	i = 40;

	printf("%x %x\n", &a[i], &(*(a + i)));

Now, see what it produces as output :-) In particular, look in the Gospel
according to Kernighan and Ritchie, at the section about pointer arithmetic.
-- 
	dg@lakart.UUCP - David Goodenough		+---+
						IHS	| +-+-+
	....... !harvard!xait!lakart!dg			+-+-+ |
AKA:	dg%lakart.uucp@xait.xerox.com		  	  +---+