[comp.lang.c++] Reference to Pointer

neath@solar-1.stars.flab.Fujitsu.JUNET (06/12/89)

I am trying to understand the workings  of pointer vs. reference. Specifically,
the following piece of code declares a typedef for char*, then  proceeds to use
a reference to this typedef as a function argument type. This works fine and is
accepted by <<cfront 1.2.1 2/16/87>>:

        #include <stream.h>
        typedef char* charP;
        
        void bar (const charP& c) {
          cout << form ("%s\n", c);
        }
        
        void foo (void) {
          bar ("HELLO WORLD");
        }

Now, what does it really mean to have  a  reference to a pointer  to a thing in
memory? Do I really get two levels of  indirection here? If  this is allowed by
cfront, why can't I use a "char*&" instead of having to  declare the typedef of
charP? At the least, whatever the rule, it should be consistently followed.

Regards
Martin Neath <neath@dsg.ti.com>
------------------------------------------------------------------------
 DISCLAIMER: As always, the opinions expressed above are strictly my own
 and do not reflect those of my employer, Texas Instruments.
------------------------------------------------------------------------

ark@alice.UUCP (Andrew Koenig) (06/14/89)

In article <NEATH.89Jun12170832@solar-1.stars.flab.Fujitsu.JUNET>, neath@solar-1.stars.flab.Fujitsu.JUNET writes:

>         #include <stream.h>
>         typedef char* charP;

>         void bar (const charP& c) {
>           cout << form ("%s\n", c);
>         }

>         void foo (void) {
>           bar ("HELLO WORLD");
>         }

> Now, what does it really mean to have  a  reference to a pointer
> to a thing in memory?

It means the same kind of thing it means to have a reference to
any other type.  In this case, when bar is called, c is bound
to (a memory cell that contains) a pointer and can be used just
as if it were a pointer.

Incidentally, the equivalent form

	void bar (const char*& c) {
		cout << form ("%s\n", c);
	}

is also legal.  C++ 1.2 doesn't accept it because of a bug.
C++ 2.0 does accept both forms.
-- 
				--Andrew Koenig
				  ark@europa.att.com