2017-02-17 3 views
2

Ich bin nicht wirklich sicher, wie oder warum das funktioniert:C++ Variablendeklaration

#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; 
} 

Es tatsächliche Leistung ist für min, INT_MAX und min_index Ich weiß, dass INT_MAX Teil der ist limits.h und so min und INT_MAX sind gleich, aber min_index hat keinen Wert, warum zeigt es einen Wert an.

+3

'min_index' ist eine nicht initialisierte Variable , enthält zufälligen Müll. Der Zugriff auf seinen Wert weist ein nicht definiertes Verhalten auf. "Scheint zu arbeiten" ist eine mögliche Manifestation von undefiniertem Verhalten. –

+0

@HGI Statt '<<" \ n "' sollten Sie in den meisten Fällen 'endl' verwenden. http://StackOverflow.com/A/213977/3141234 – Alexander

+0

@Alexander Ich würde das Gegenteil sagen. Meistens müssen Sie den Puffer nicht leeren und die damit verbundenen Kosten bezahlen. – juanchopanza

Antwort

3

C++ ist keine speicherfreundliche Sprache. Es gibt keine Garantie, dass einer Variablen ein Wert zugewiesen wurde, bevor sie verwendet wird.

Was Sie als den gedruckten Wert von min_index sehen, ist der Wert im Speicher von min_index, der gerade so von der letzten Zeit, die der Speicher zuvor festgelegt wurde, übrig geblieben ist.

Lesen von einer solchen initialisierten Variable ist "undefined Verhalten", in dem jeder Aufruf dieses Programms wahrscheinlich zu einem anderen, unerwarteten Ergebnis führen wird (abhängig davon, was zuletzt mit dem Speicher verwendet wurde, der schließlich für min_index zugewiesen wurde).

0

Weil $ min_index nicht auf einen bestimmten Wert initialisiert wird, sondern einem Speicherplatz zugewiesen wird. Wenn Sie min_index drucken, ohne ihn vorher zu initialisieren, werden die Werte an diesem Speicherort als Daten vom Typ min_index interpretiert.

Daher wird immer empfohlen, eine Variable zu initialisieren, weil Sie nie wissen werden, was der Wert dieses Speicherplatzes ist.

0

kann nicht initialisiert werden min = int_max. der Wert zeigt aufgrund garbage Wert

1

in einer Sprache wie C++ und C, wenn Sie eine Variable zu definieren, wie:

int x; 

ein kleiner Speicherblock zur Variablen zugeordnet ist. Wir haben die Variable jedoch nur deklariert und nicht initialisiert, was bedeutet, dass der Speicherblock, der der Variablen zugewiesen wurde, noch einen Wert enthält, der von früheren Programmen und Operationen übrig geblieben ist. Dieser Wert wird als Müllwert bezeichnet. Dies kann zu fehlerhaften Ergebnissen in Programmen führen.

dies zu vermeiden, deklarieren und initialisieren Variablen wie folgt aus:

int x = 0; 

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

Siehe auch:How does an uninitiliazed variable get a garbage value?