我总是尽量避免返回字符串文字,因为我担心它们不是在函数之外定义的.但我不确定是不是这样.我们来看一下这个函数:
const char *
return_a_string(void)
{
return "blah";
}
Run Code Online (Sandbox Code Playgroud)
这是正确的代码吗?它确实适用于我,但也许它只适用于我的编译器(gcc).所以问题是,do(string)文字有一个范围,或者它们是否一直存在/定义.
标题说明了一切.
我发现了一个基本相同的旧问题,但我需要进一步澄清.
在这个问题中,接受的答案是:
Run Code Online (Sandbox Code Playgroud)char* text = "Hello, world";
这里自动变量(指针)在堆栈上创建并设置为指向常量内存中的值,这意味着:
- ""中的字符串文字存在于整个程序执行中.
- 您不负责"分配"或"释放"它
- 你可能不会改变它.如果你想改变它,那么你必须分配一些"非常量内存"并将其复制到那里.
这是说指针被删除了,而不是指针指向的数据?如果我要在函数中创建1,000,000个指向字符的指针,当它们超出范围时我的所有内存都会被释放?或者只是制作指针所需的内存,将实际角色本身留在后面以占用我所有的记忆?