formal parameter question

utzoo!decvax!harpo!eagle!mhtsa!alice!npoiv!eisx!pyuxll!jse utzoo!decvax!harpo!eagle!mhtsa!alice!npoiv!eisx!pyuxll!jse
Mon Jan 31 15:46:58 AEST 1983

Suppose you are given the following formal parameter declaration:

	int	(*x)[];

What type is x?

My first thought was 'pointer to pointer to int', because
page 95 of K&R says that 's[]' and '*s' are equivilent
as formal paramters in a function definition, so I converted it
to *(*x).  But this is wrong.

The K&R book would seem to say that this is a multi-dimensional array,
except that it says you are required to give the constant between
the brackets (pages 105 and 195).

The vax C compiler seems to treat it as a multi-dimensional array, but one
that is declared

	int	x[][0];

although you can't use this declaration yourself (it will let
you use int (*x)[0] tho).  So x[0][0] and x[1][0] reference
the same location!

In the context in which I encountered this declaration, it was intended
that x be a pointer to an array, so I tried to pass the address of
the first element of the array but lint complained of a type mismatch.

Is 'int (*x)[]' legitimate?  I know 'int (*x)[5]' is legitimate,
declaring x to be a pointer to an array of 5 integers (x+1 points to
the next array of 5 integers).  But I don't see why I shouldn't
be able to convert 'int (*x)[]' to 'int **x'.  Is there any reason
why you would really want to use 'int (*x)[]' for pointer to array
rather than the simpler 'int *x'?

I would appreciate it if someone can provide further insight.

	Jan Edler	pyuxll!jse	(abi piscataway)
			cmcl2!edler	(nyu)
			edler at	(I think this works)

More information about the Comp.lang.c mailing list