char *myfunc() {
char *temp = "string";
return temp;
}
在这段代码中,指针 temp
所指向的对象是在哪里分配的?它的作用域是什么?
这个函数是否是返回 char* 指针的有效方法?
代码正确吗?
是的,你的代码几乎没有问题,因为"string"
是一个字符串字面量,位于静态存储区。
注意:指针只是一个存储内存地址的变量。这行代码仅将字符串字面量"string"的地址存储在名为temp
的变量中。
char *temp = "string";
C++标准保证字符串字面量将在程序的整个生命周期中一直存在于内存中,具体如下所述。这意味着您可以在整个程序生命周期中的任何作用域中自由使用该内存地址。请注意,如果尝试修改字符串字面量,则会导致未定义的行为,并且函数返回值应该声明为const char*。另外,如果在代码中有两个名为"string"的字符串,则它们是否不同是实现定义的。const char*
而不是 char*
。如前所述,它在编译时分配;它是一个字面量。
但在C++中,它并不像可能的那样有效,因为指针没有指向 const char
。一般来说,你应该考虑以非常不同的方式完成它。