以下情况会让我更加困惑。据我所知,局部变量不会被指针或引用返回。例如功能返回指针
char * foo()
{
return "Hello world";
}
int* fooo() {
static int i = 100;
return &i;
}
这两种情况会发生什么?
以下情况会让我更加困惑。据我所知,局部变量不会被指针或引用返回。例如功能返回指针
char * foo()
{
return "Hello world";
}
int* fooo() {
static int i = 100;
return &i;
}
这两种情况会发生什么?
字符串文字是静态存储的,当然static int i
也是静态的。您可以从函数返回指向静态变量的指针,因为它们不是局部变量,并且当您像堆栈分配变量一样退出函数时它们不会被销毁。在另一方面,你的第一个例子应该返回const char *
,
从C++标准节lex.string:
字符串文字......具有类型为“n为const char数组”和静态存储持续时间(basic.stc),其中n是如下面所定义,并且与给定的字符初始化的字符串的大小...
感谢您的详细解释 – Srijeyanthan 2013-04-24 03:57:33
答案也提到它,“当然'static int i'也是静态的。您可以安全地返回指向所有静态变量的指针。 – perreal 2013-04-24 03:58:42
第一代码不能编译。您可以将该字符串强制转换为char数组并返回。第二个代码将被编译,但是你的变量将超出范围。因此,函数返回时的引用将不再有效。通过地址返回一个局部变量是不好的。是否有任何特定的原因想要这种行为?
你可以new/malloc一个char数组或int,然后返回它。只要您不手动释放/删除内存,就可以保证范围内存在变量。然后,您可以愉快地从其他功能访问内存。
希望这会有所帮助。
你的第一个功能是无效的,你应该返回
const char*
,是的,你可以返回static
变量不会忽略:当函数返回,因为他们在静态数据存储段被alocalted它们不被破坏
第一个不应该在现代C++中干净地编译。 – chris 2013-04-24 03:28:34
这意味着,像这样返回是一个标准方法? – Srijeyanthan 2013-04-24 03:40:14
我不会说这是“标准”。这是合法的,但这不是通用惯例。你能否给我们提供更多关于你想要完成的内容的信息,以及为什么你认为你需要编写这些代码? – 2013-04-24 03:40:41