Are addresses of const members const?

Andrew Koenig ark at alice.att.com
Fri Feb 8 06:20:27 AEST 1991


In article <63928 at brunix.UUCP> sdm at cs.brown.edu (Scott Meyers) writes:

>     struct Foo {
>       char *data;
>     };

>     char * f(const struct Foo x)
>     {
>       return x.data;
>     }

> Within function f, x is a const.  Is x.data therefore a const?

Yes, in both ANSI C and C++, but that doesn't have the implications
you think it does.  For example, the ANSI C standard gives
the following example in section 3.5.3 (slightly abbreviated here):

	const struct s { int mem; } cs = { 1 };
	int * pi;

	pi = &cs.mem;	/* violates type constraints for = */


> Yet this example
> sails through 3 C++ compilers (g++, cfront 2.0, Sun cfront 2.1 beta) and
> one ANSI C compiler (gcc) without so much as a wimper.

When you say that x is a const Foo, that means that x.data is itself
a constant -- but that doesn't say anything about the memory to which
x.data points.  In other words, the type of x.data is char *const,
which is distinct from const char *.  In particular, there is no problem
assigning a char *const to a char *.
-- 
				--Andrew Koenig
				  ark at europa.att.com



More information about the Comp.lang.c mailing list