Benötige Hilfe bei einem Beispiel für das Verständnis von Pointern



  • Hallo, ich fange gerade mit Pointern an und habe das noch nicht richtig verstanden. Daher würde ich mich, wenn mir jemand ein Beispiel zu einer Aufgabe geben könnte für das Verständnis.
    Aufgabe: Tauschen Sie 2Zahlen in einer Funktion. Das ist ja ohne Pointer unmöglich, da man nur ein Wert zurückgeben kann, also wäre ich bei Hilfe sehr dankbar.
    Soweit hab ich das schon mal(Bin bei Hilfe sehr dankbar):
    int main(int argc, char* argv[])
    {
    int zahlen[2] = {1,2};
    int *pointer;
    void tauschen(int, int);

    //Initialisierung
    pointer = zahlen;

    tauschen(*zahlen,(*zahlen+1));

    return 0;
    }
    //hier weiß ich leider nicht weiter und, ob der anfang richtig ist weiß ich leider auch nicht
    void tauschen(int , int )
    {
    int tauscher;
    }

    Danke



  • tauschen(*zahlen,(*zahlen+1));

    Wichtig: tauschen(*zahlen,*(zahlen+1));

    void tauschen(int* i,int* j){
      int tauscher;
      tauscher= *i; // *i :dereferenzierung
      *i=*j;
    }
    


  • Vielen Dank, das hat mir sehr geholfen. Jetzt sind alle mein Fragen beantwortet zu Pointern. DANKE



  • sry

    Wichtig: tauschen(*zahlen,*(zahlen+1));

    Quatsch!
    tauschen (zahlen,zahlen+1); // wäre richtig, da Arrays eigendlich Zeiger sind.
    es gilt:
    zahlen[1] == *(zahlen+1)



  • Nun habe ich folgenden Fehler in der 10. Zeile:
    error C2664: 'tauschen' : Konvertierung des Parameters 1 von 'int [2]' in 'int' nicht moeglich
    Also jetzt hab ich den Quellcode so:

    int main(int argc, char* argv[])
    {
    	int zahlen[2] = {1,2};
    	int *pointer;
    	void tauschen(int, int);
    
    	//Initialisierung
    	pointer = zahlen;
    
    	tauschen (zahlen,zahlen+1); 
    
    	return 0;
    }
    void tauschen(int *i,int *j)
    {
    	int tauscher;
    	tauscher= *i; // *i :dereferenzierung
    	*i=*j;
    	*j=*i;
    }
    

    Bin bei Hilfe natürlich sehr dankbar



  • Hallo,

    der Fehler ist in Zeile 10.

    Butzi
    Euer
    LordBritish
    IT-Titan, Blondinenflachleger und Audi A3-Fahrer (220PS!)



  • Ja, das stimmt ich hab ja geschrieben

    Nun habe ich folgenden Fehler in der 10. Zeile:
    error C2664: 'tauschen' : Konvertierung des Parameters 1 von 'int [2]' in 'int' nicht moeglich

    Aber meine Frage ist eher, wie muss das richtig aussehen, da ich gerad erst mit Pointer anfange und noch nicht soviel Ahnung hab.
    Danke



  • Du könntest tauschen( &zahlen[0], &zahlen[1] ); probieren 🙂 Und im Magazin gibt's auch einen guten Artikel zu Zeigern.



  • Damit ist der alte Fehler weg, aber denn kommt folgender Fehler:

    error C2664: 'tauschen' : Konvertierung des Parameters 1 von 'int *' in 'int' nicht moeglich



  • Also:
    (1).

    qwertzuiopü+ schrieb:

    sry

    Wichtig: tauschen(*zahlen,*(zahlen+1));

    Quatsch!
    tauschen (zahlen,zahlen+1); // wäre richtig, da Arrays eigendlich Zeiger sind.
    es gilt:
    zahlen[1] == *(zahlen+1)

    Arrays sind keine Zeiger.
    (2).

    int main(int argc, char* argv[])
    {
        /* --- */
        void tauschen(int, int);
        /* --- */
    }
    

    in der main hat die Funktionsdecleration nichts zu suchen!

    void swap(int*, int*);
    
    int main()
    {
        int data[] = {1, 2};
        swap(&data[0], &data[1]); // swap(data, data + 1);
    }
    
    void swap(int* first, int* second)
    {
        int temp = *first;
        *first = *second;
        *second = temp;
    }
    

    so ist es korrekt.



  • Ja das klappt. DANKE
    Und wegen der Funktionsdekleratio: Unser Lehrer hat uns das so beigebracht und der wird sauer wenn wir das hinterher anders machen, also werd ich das weiterhin so machen (zumindest inner Schule, damit ich die gute Note beibehalte). Aber mich würd interessieren wieso sie da nichts zu suchen hat?



  • Hmm weil die Funktion sich im globalen "Scope" befindet. Dann hat deren Dekleration wenig im lokalen Scope der main zu suchen.


Anmelden zum Antworten