Why does this work:
char foo[6] = "shock";`
while this does not work:
char* bar = "shock"; //error
Why does bar
have to be const
while foo
doesn't? Arrays in C decay to pointers, so don't foo
and bar
technically have the same types?
CodePudding user response:
Literals are held in reserved areas of memory that are not supposed to be changed by code. Changing the value held at the address storing that literal would mean that every time any other code tried to use that literal, it would find the wrong value in that memory. So it is illegal to modify that memory, and hence illegal to treat it as not constant.
CodePudding user response:
With this declaration:
char foo[6] = "shock";
Variable foo
is type array of char and it containes 6 non-const chars. The string literal contains const chars which are copied into the array on initialization.
While with this declaration:
char* bar = "shock"; //error
Variable bar
is type pointer to char. You are trying to make it point to the address of "shock"
which is a string literal containing const char
.
You can't point a pointer to non-const char at a const char.
So you must do this:
const char* bar = "shock";`
CodePudding user response:
because "shock" is a constant, so a pointer to it must be const
for historical reasons C allows this (and causes many errors that lead to SO posts)
CodePudding user response:
char* bar = "shock";
is roughly equivalent to
const char anonymousArray[6] = "shock";
char *bar = anonymousArray;
Arrays decays to pointers. That's not the same as actually being pointers.