2017-02-17 8 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; 
} 

Существует фактический выход для min, INT_MAX и min_index Я знаю, что INT_MAX является частью limits.h и так min и INT_MAX совпадают, но min_index не получает значения, почему оно отображает значение.

+3

'min_index' является неинициализированным переменной , содержащий случайный мусор. Доступ к его значению показывает неопределенное поведение. «Кажется, нужно работать» - одно из возможных проявлений неопределенного поведения. –

+0

@HGI Вместо '<<" \ n "', вы должны использовать 'endl' в большинстве случаев. http://stackoverflow.com/a/213977/3141234 – Alexander

+0

@ Александр Я бы сказал наоборот. В большинстве случаев вам не нужно сбросить буфер и оплатить соответствующую стоимость. – 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?