Zeigerarithmetik



  • Hallo leute,

    Ich habe eine kleines Problem mit Zeigerarithmetik.

    Irgendwie klapp bei mir Ringtausch mit Hilfsvariable nicht.

    Hier ist mein Program:

    #include <stdio.h>
    
    void ausgabe (int feld[])
    {
    	int *p;
    	p = &feld[0];
    	int i = 0;
    
    	printf("Feld: ");
    	while (i <= 9)
    	{
    
    		printf("%d  ", *p);
    		i++;
    		p++;
    	}	
    
    }
    
    void tausche(int feld [])
    {
    	int *p;
    	int *p2;
    	p = &feld[0];
    	p2 = &feld[9];
    	int temp;
    	int i = 0;
    	int j = 9;
    
    	printf("\nFeld:  ");
    
    	while (j>=0 && i <= 9)
    	{
    
    		temp = *p;
    		*p = *p2;
    		*p2 = temp;
    
    		printf("%d  ", *p);
    	i++;
    	j--;	
    	p++;
    	p2--;
    	} 
    
    }	
    
    int main()
    {
    	int *p;
    	int feld[11] = {144, 0, 95, 32, 2, 53, 765, 8876, 32, 15};
    	p = &feld[0];
    
    	ausgabe(feld);
    	tausche (feld);
    
    	getchar();
    	return 0;
    
    }
    

    Die Funktion tausche() soll zwei int-Zeiger entgegennehmen und soll den inhalt der beiden Variablen vertauschen, auf die die zeiger verweisen.
    Ich muss hier einen Ringtausch mit Hilfsvariable nutzen aber bei mir kommt falsche Ergebnis raus, weiss jemand vielleicht wo es liegt?

    Danke im Voraus :p :p



  • Deine Funktion tausche nimmt aber nur einen int-Zeiger entgegen.

    Wie sehen denn deine "falschen Ergebnisse" aus?
    Das ist eine sehr bescheidene Fehlerbeschreibung.

    Gib in Zeile 42 noch i, j und temp mit aus.
    Spiel die Funktion mal auf dem Papier nach oder nimm den Debugger.

    Und warum hast du bei int feld[11] eine 11 und dann 10 Werte zum initialisieren?



  • DirkB schrieb:

    Deine Funktion tausche nimmt aber nur einen int-Zeiger entgegen.

    Wie sehen denn deine "falschen Ergebnisse" aus?
    Das ist eine sehr bescheidene Fehlerbeschreibung.

    Gib in Zeile 42 noch i, j und temp mit aus.
    Spiel die Funktion mal auf dem Papier nach oder nimm den Debugger.

    Und warum hast du bei int feld[11] eine 11 und dann 10 Werte zum initialisieren?

    Also wie ich es verstanden habe muss ich feld[] einfach tauschen.
    In tausche() habe ich 2 int zeigern also *p und *p2 p wird von 0 zähler und p2 wird von 9 und dann werde ich beide Werte mit Ringtausch vertauschen oder habe ich falsche verstanden?

    So sieht mein Ergebniss aus:

    Feld: 144, 0, 95, 32, 2, 53, 765, 8876, 32, 15
    Feld: 15, 32, 8876, 765, 53, 53, 765, 8876, 32, 15

    Ich will aber so haben:

    Feld: 144, 0, 95, 32, 2, 53, 765, 8876, 32, 15
    Feld: 15, 32, 8876, 765, 53, 2, 32, 95, 0, 144

    Sorry ich habes nicht verstanden was meinst du mit i, j und temp? wo muss ich die mit ausgeben?

    feld [11] da habe ich ein Fehler, ich wollte noch ein Element geben aber das habe ich vergessen, hier liegts aber nicht.

    Noch kann ich Debugger nicht nutzen, das muss ich auch noch lernen, ich schreibe meine Programme auf Debian, welche Debugger wirst du empfhelen?



  • Beim "Tauschen" darfst du natürlich nur bis zur/vor die "Mitte" gehen, das würde sich dir erschließen, wenn du dir das mal aufmalst.
    Fürs Erste reicht dir evtl. auch ein zusätzliches printf innerhalb deiner Schleife.


Anmelden zum Antworten