macro to specify output parameter

Guy Harris guy at sun.uucp
Sat Aug 16 08:58:37 AEST 1986

>     When I read C functions, many times I was confused about the roles
>     played by their parameters:  it is hard to tell a pointer
>     parameter is an array or a pointer to a scaler (to be used as an
>     output parameter).

Well, actually, pointer parameters are never arrays; arrays and pointers are
two completely different things.  This may be a good argument for allowing
"&" to be applied to arrays (yielding a pointer value of type "pointer to
array of <whatever>", NOT type "pointer to <whatever>"!) and using "pointer
to array" as the argument type if you really want to pass a pointer to the

Of course, in the second example routine "foo", it may not really be a
pointer to the first element of an array/string; that routine might be used
to stuff characters into some arbitrary place in a string, so it's not
really a pointer to a string/array, it's just a pointer to a "char" that is
assumed to be somewhere within a string/array.

This may, in fact, also be an argument for reference types a la C++; there,
your routine "foo" would be written as

		char &c;
		c = 'a';	/* store 'a' in the "char" referred to by
				   "c" */

This is how call-by-reference is done in C++; in other languages that
implement call-by-reference, output parameters are generally passed by

Your second proposed style comes close to implementing this as best as can
be done in C.  Try

	#define	REF	*	/* for defining reference types */
	#define	DEREF	*	/* dereferencing operator; since C doesn't
				   know about reference types, it won't
				   automatically dereference them */

		char REF c;
		DEREF c = 'a';
	Guy Harris
	{ihnp4, decvax, seismo, decwrl, ...}!sun!guy
	guy at (or guy at

More information about the Comp.lang.c mailing list