考虑以下代码:
const char* someFun() {
// ... some stuff
return "Some text!!"
}
int main()
{
{ // Block: A
const char* retStr = someFun();
// use retStr
}
}
在功能someFun()
这里是"Some text!!"
存储(我认为这可能是在ROM中的一些静态区),什么是它的 范围 一生?
将指向的内存retStr
整个程序占用,或者一旦块A出口被释放?
C ++标准不说在哪里字符串文字应存放。 但它确实保证他们的一生是程序的生命周期。 您的代码,因此有效。
该"Some text!!"
没有一个范围 。 适用范围是一个命名实体的性质。 更确切地说,它是这个名字本身的属性。 "Some text!!"
一种莫名的对象-一个字符串。 它没有名字,因此关于它的“范围”的任何讨论毫无任何意义。 它没有范围。
你似乎在问什么是不是范围 。 它是终身或存储时间 "Some text!!"
。 在C / C ++字符串字面量具有静态存储持续时间 ,这意味着他们居住的“永远”,即只要程序运行。 因此,内存占用"Some text!!"
永远不会释放。
只要记住(作为一个侧面说明),其字符串文字都是非modifyable对象。 它是非法写入内存。
字符串是静态存储在程序二进制的特殊(通常是只读的现代OS)部分。 (虽然它加载到内存单独的字符串,只为总节),并不会被释放它的内存不分配。
将retStr指向的内存整个程序占用,或者一旦块A出口被释放?
编辑:
这将是没有公布,但retStr
将不可用。 (块范围)
const char *ptr;
{
const char* retStr = "Scope";
ptr = retStr;
}
printf("%s\n", ptr); //prints "Scope"
//printf("%s\n", retStr); //will throw error "retStr undeclared"