I'm curious about string literals. I've read that in the case of something like this, const char * ptr = "Hello World";
that t开发者_JS百科hey have static storage duration in the data of the program and are not allocated on the heap or stack. What about when it is used as an argument?
for example
Function("panda");
when defined as
void Function(const char* str)
{
...
}
is "panda"
now also included in the data of the program or is it allocated on the stack?
Everywhere in your program where you have string constants it's the same. In your example you are just passing a pointer to the address that the string is stored. So it's the same as the general case you presented. Using it as a function argument has nothing to do with where it is stored.
In your example, "panda" is (normally: implementation defined) stored with static duration in the data of the program.
When you call Function("panda")
, this is the same as extern char* s = "panda"; Function(s);
. This is made more clear in your declaration for the function. Function
does not receive a char array, it receives a pointer to const chars. So the stack contains a pointer, not a char array.
精彩评论