为什么输出是

时间:2018-06-17 04:25:32

标签: c++ stack-memory

为什么这段代码的输出是0 10 10.在第一种和第三种情况下,变量v没有值?

#include <iostream>
using namespace std;
void f(bool val)
{
    int v;
    if(val)v=10;
    cout<<v<<endl;

}
int main() {

    f(false);
    f(true);
    f(false);
    return 0;
}

4 个答案:

答案 0 :(得分:1)

因为当val = false不满足此条件if(val)时,将打印出未初始化的变量v

那时v的值可以是0,最后一个值或其他任何值。这是未定义的。

答案 1 :(得分:0)

int v只声明v变量,但不为其赋值,因此其值未定义,它将与内存中的当前值相同。

您可以在声明时指定v初始值,喜欢int v = 0,因此当val为false时,v将始终为0。< / p>

答案 2 :(得分:0)

您的答案可能会有x 10 x,其中x可以是任意数字。实际上,这是垃圾价值。您将在不同平台上的不同编译器中获得不同的值。

某处你会得到0 10 10,因为它会缓冲v的值。但是其他地方会得到10 10 10因为它在编译时缓冲了值。所以,说x的价值是不正确的。

因此,您应该说答案为x 10 x,其中x是垃圾值。

答案 3 :(得分:-3)

答案是 10 10 10 您需要在if条件语句中比较val的值以获得不同的答案。它在if语句中取v的值,因为没有比较。 试试其他编译器。

试试这里 https://www.onlinegdb.com/online_c++_compiler