2017-02-17 128 views
2

我真的不知道如何或为何这样工作的:C++变量声明

#include <stdio.h> 
#include<stdlib.h> 
#include <limits.h> 
#include <iostream> 
using namespace std; 

int main() { 

int min = INT_MAX, min_index; 

cout << min <<"\n"; 
cout << INT_MAX << "\n"; 
cout << min_index <<"\n"; 


system("pause"); 
return 0; 
} 

有实际产量为minINT_MAXmin_index 我知道INT_MAX是部分limits.hminINT_MAX是相同的,但min_index没有给出值为什么它显示一个值。

+3

'min_index'是未初始化的变量,包含随机垃圾。访问其价值展示未定义的行为。 “似乎工作”是未定义行为的一种可能表现形式。 –

+0

@HGI在大多数情况下,您应该使用'endl'来代替'<<“\ n”'。 http://stackoverflow.com/a/213977/3141234 – Alexander

+0

@Alexander我会说相反。大多数时候你不需要冲洗缓冲区并支付相关的成本。 – juanchopanza

回答

3

C++不是一种内存安全的语言。不能保证变量在使用前已经被分配了一个值。

作为min_index的打印值,您所看到的是min_index的存储器中的值,它恰好是从上次设置存储器时发生的。

从这样一个初始化变量读取是“未定义的行为”,因为每次调用该程序都可能导致不同的意外结果(取决于最后使用最终分配给min_index的内存的内容)。

0

由于$ min_index未初始化为指定值,但它被分配给一个内存位置。如果您先打印min_index而不先初始化它,则该内存位置上的值将被解释为min_index类型的数据。

因此,总是建议初始化一个变量,因为您永远不会知道该内存位置的值是什么。

0

你不能初始化min = int_max。该值表示由于垃圾值

1

在像C和C++语言,当你定义一个变量,如:

int x; 

的存储器的一小块被分配给变量。但是,我们只声明了变量,并没有初始化它,这意味着已经分配给变量的内存块仍然包含一些从以前的程序和操作中遗留下来的值。该值被称为垃圾值。这可能会导致程序中的错误结果。

为了避免这种情况,声明和初始化变量是这样的:

int x = 0; 

来源:What do you mean by a garbage value in a variable?

参见:How does an uninitiliazed variable get a garbage value?