[英]returning static pointer to local variable from function
我在网上发现这个代码就是一个例子,但我认为这是不正确的。 返回自动变量的地址,这有点巧合,它有时可能会起作用:
返回指向已销毁的局部变量的指针,该变量将成为无效的内存位置,是未定义的行为 。
我唯一的犹豫是关于指针是static
,但我认为这没有任何改变,因为这是应该是static
而不是指针的变量:局部变量将被破坏。 你能否确认或否认?
double *& showNumber()
{
double n = 1550.85;
static double *v = &n;
return v;
}
int main(int argc, char *argv[])
{
double sn = *showNumber();
sn = *showNumber();
//...
}
您的代码仍有未定义的行为,因为退出函数后静态指针的值无效。 指针引用的局部变量将被销毁。任何下次调用该函数时,该局部变量的地址都可以不同。
您可以通过以下方式编写函数
double * showNumber()
{
static double n = 1550.85;
return &n;
}
在这种情况下,返回的指针将包含相同的有效值。
一旦初始化,静态变量就会在程序的整个持续时间内持续存在。 你们都为v
而设,但不是 n
的地址。
如果指针和它的变量都是静态的,那么只有代码才行。 否则局部变量无论如何都会死亡。
独立于本地或全局,静态变量将一直持续到程序结束。 但是当我们返回该变量的值时,重新开始使用全局。 因为静态本地可能会因线程而受到影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.