2017-02-17 126 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?