-1
#include <iostream>
using namespace std;
int *wedgic(int foo)
{
    cout<<foo;
    return (&foo);
}

int main()
{
    int fo=7;
    int *blah;
    blah=wedgic(fo);
    (*blah)+=3;
    wedgic(fo);
}

谁能告诉我为什么结果是 7 7 7 而不是 7 7 10?

请帮忙,我想我不明白 Blah=wedgic(fo); 是什么意思 做...

谢谢

4

2 回答 2

2

首先,您的函数wedgic返回一个指向其局部变量的指针foowedgic函数终止后指针立即变为无效。任何使用返回的指针值的尝试都会导致未定义的行为。换句话说,您的程序不会产生有意义的结果。行为未定义。无论您在那里看到什么(7 7 7或其他任何东西)都只是一个没有有意义的解释的意外。

其次,您的程序只尝试两次输出任何内容。然而你声称它以某种方式输出了三个数字。这是极不可能的,即使对于具有未定义行为的程序也是如此。要么是您对输出的声明是错误的,要么是您发布了假代码。当您询问有关某些代码产生的结果的问题时,请发布真实代码。

于 2012-08-21T22:58:33.410 回答
1

问题是它wedgic()返回一个指向它自己的局部变量的指针,而不是fo你在main().

变量fooinwedgic()是一个非静态局部变量,这意味着它的生命周期不会超出对该函数的调用。返回指向这样一个变量的指针是完全错误的,因为一旦在函数外部使用指针,它指向的东西就不再存在。

因此

(*blah)+=3;

是无效的,实际上是危险的。

于 2012-08-21T22:58:18.953 回答