I am trying to understand array declarations, constness, and their resulting variable types.
The following is allowed (by my compiler):
char s01[] = "abc" ; // typeof(s01) = char*
const char s02[] = "abc" ; // typeof(s02) = const char* (== char const*)
char const s03[] = "abc" ; // typeof(s03) = char const* (== const char*)
Alternatively, we can declare the array size manually:
char s04[4] = "abc" ; // typeof(s04) = char*
const char s05[4] = "abc" ; // typeof(s05) = const char* (== char const*)
char const s06[4] = "abc" ; // typeof(s06) = char const* (== const char*)
How do I get a resulting variable of type const char* const
? The following are not allowed (by my compiler):
const char s07 const[] = "abc" ;
char const s08 const[] = "abc" ;
const char s09[] const = "abc" ;
char const s10[] const = "abc" ;
const char s11 const[4] = "abc" ;
char const s12 const[4] = "abc" ;
const char s13[4] const = "abc" ;
char const s14[4] const = "abc" ;
Thanks
const char *const s15 = "abc";
Your first typeof
comments aren't really correct. The type of s01
is char [4]
, and the types of s02
and s03
are const char [4]
. When used in an expression and not the subject of either the &
or sizeof
operators, they will evaluate to rvalues of type char *
and const char *
respectively, pointing at the first element of the array.
You can't declare them in such a way that they decay to an rvalue that itself is const-qualified; it doesn't really make any sense to have a const-qualified rvalue, since rvalues can't be assigned to. It's like saying you want a 5
constant that is of type const int
rather than int
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With