ERLEDIGT! - Verständnisfrage zu pointer auf Schleifenvariable



  • Hallo!

    Kann mir bitte einer erklären, warum mir hier der
    Wert 6 ausgegeben wird?

    Grüße, x3meblue

    // main.cc
    #include <iostream>
    
    using namespace std;
    
    int main() {
    	int *p;
    	for (int x = 1; x <= 5; x++)
    		p = &x;
    	cout << *p;
    
    	return 0;
    }
    


  • x3meblue schrieb:

    Hallo!

    Kann mir bitte einer erklären, warum mir hier der
    Wert 6 ausgegeben wird?

    Grüße, x3meblue

    // main.cc
    #include <iostream>
    
    using namespace std;
    
    int main() {
    	int *p;
    	for (int x = 1; x <= 5; x++)
    		p = &x;
    	cout << *p;
    
    	return 0;
    }
    

    Es ist FAST das gleiche wie

    int main() {
    	int *p;
    	int x = 1;
    	for (; x <= 5; x++)
    		p = &x;
    	cout << *p;
    
    	return 0;
    }
    

    Und das ist das gleiche wie

    int main() {
    	int *p;
    	int x = 1;
    	p = &x;
    	for (; x <= 5; x++)
    		;
    	cout << *p;
    
    	return 0;
    }
    

    oder

    int main() {
    	int *p;
    	int x = 1;
    	p = &x;
    	while( x <= 5)
    		x++;
    	cout << *p;
    
    	return 0;
    }
    

    oder gleich

    int main() {
    	int *p;
    	int x = 1;
    	p = &x;
    	x = 6;
    	cout << *p;
    
    	return 0;
    }
    

    Aber nur FAST das gleiche. In Wirklichkeit ist i nach der for-Schleife gestorben und nicht mehr da. Du greifst auf den Speicher zu, wo vorhin mal x war. Das kann klappen, muß aber nicht. Der Compiler darf durchaus Code basteln, wo das auch mal nicht klappt.



  • volkard schrieb:

    Der Compiler darf durchaus Code basteln, wo das auch mal nicht klappt.

    Genauer gesagt darf der Compiler hier machen was er will. Das nennt sich undefiniertes Verhalten und ist das Übelste, was man einem C++-Programm antun kann.



  • Danke ihr beiden! Habe meinen Denkfehler jetzt verstanden 👍


Log in to reply