Pointer-Array in Funktionen



  • Hallo zusammen,
    sitze grade am Thema Zeiger und Vektoren.
    Ich wollte eine Funktion schreiben, welcher man ein Array mit Zeigern übergibt. Diese soll es sortieren.

    int Liste1[5] = { 40,70,30,50,60 };
    int* ptrListe1[5] = { NULL };
    
    for (int i = 0; i < sizeof(Liste1) / sizeof(int); i++)
    {
    	ptrListe1[i] = &Liste1[i];
    }
    
    sort(*ptrListe1);
    
    void sort(int* Liste)
    {
    	int temp{ 0 };
    	bool sortiert;
    	do
    	{
    		sortiert = false;
    		for (int i = 0; i < sizeof(Liste) / sizeof(int)-1; i++)
    		{
    			if (Liste[i] > Liste[i + 1])
    			{
    				temp = Liste[i + 1];
    				Liste[i + 1] = Liste[i];
    				Liste[i] = temp;
    				sortiert = true;
    			}
    		}
    
    	} while (sortiert == true);
    }
    

    Es tut sich genau nichts, wo liegt der Fehler. Wäre nett wenn ihr mir helfen könntet.



  • Überlege dir mal, was innerhalb deiner sort-Funktion der Ausdruck

    sizeof(Liste) / sizeof(int)-1
    

    ergibt.

    Wichtig: deine Variable "Liste" innerhalb von sort hat einen anderen Typ als die außerhalb von sort!

    Falls nur das Pointer-Array sortiert werden soll, würde ich das ganze ein wenig abkürzen und deine komplette Funktion "sort" streichen und stattdessen schreiben:

    sort(begin(ptrListe1), end(ptrListe1), [](const auto *a, const auto *b) {
        return *a < *b;
    });
    


  • Mmh, also übergebe ich die Länge des Arrays einfach als weiteren int Parameter? Dann müsste das ja funktionieren...

    Danke für den Tipp mit der sort funktion 👍 , aber ich wollte bewusst Bubblesort da reinbringen.´

    Edit:
    Hat funktioniert, danke dir 😉



  • Hallo
    Kann mir vielleicht jemand helfen?
    Ich versuche gerade in einem unterprog. getlinr zu verwenden aber es funktioniert nicht.
    Warum?



  • Ich meinte getline



  • C++Simon schrieb:

    Ich meinte getline

    string s;
    getline(cin,s);
    cout << s;
    

Anmelden zum Antworten