[Help] Maximum von Zahlen in einem Array finden?



  • int max ( int const *v, int anzahl)
    {
           //Bestimmung des Maximums
           int max = *v[0];
    
           for (int i=1; i<anzahl; i++)
           {
    
                  if ( *v[i] > max)
                  max = *v[i];
    
           }
    return max;
    
    }
    

    probier mal so



  • DarkSea schrieb:

    int max ( int const *v, int anzahl)
    {
           //Bestimmung des Maximums
           int max = *v[0];
           
           for (int i=1; i<anzahl; i++)
           {
                     
                  if ( *v[i] > max)
                  max = *v[i];
                 
           }
    return max;
           
    }
    

    probier mal so

    hm, so geht nicht... kann mir jemand erklären, warum man nicht derefferenzieren muss, wenn man v als zeiger übernimmt ?



  • war v[i] nicht dasselbe wie (v+itypgröße) ???



  • @betrug:
    Afaik reicht ein (v + i). Da der Compiler bei sowas automatisch isizeof(typ) Schritte weiter geht.

    int v[4] = { 0, 10, 20, 30 };
    
    for(unsigned int i = 0; i < 4; ++i)
         std::cout << *(v + i) << " "; // von &v[0] i*sizeof(int) Schritte weiter.
    

    @DarkSea:
    Du hast es bereits dereferenziert, da wie bereits von betrug gesagt, es das gleiche ist, ob du v[i] oder *(v + i) schreibst. IIRC wandelt der Compiler ein v[i] dann sowieso in ein *(v + i) um.

    Caipi



  • und was muss ich an dem code jetzt ändern?



  • und wenn ich jetzt einen char "testchar" an eine Funktion übergebe, muss ich die funktion in der art schreiben:

    void funktion(char *einchar)
    {}
    
    int main()
    {
    funktion(testchar);
    ....
    

    ich übergebe als einen char, übernehme bei der funktion aber einen zeiger, innerhalb der funktion muss ich dann aber wieder nicht derefferenzieren, da "testchar" quasi ein array von chars ist ? (hab hier nämlich grad so ein programm, welches einen char als zeiger übernimmt, innerhalb der funktion aber den char ohne zu derefferenzieren an einen konstruktor der klasse String übergibt)



  • Funktioniert der von mir (leicht) modifizierte Code nicht oder liest du die Posts nicht richtig?

    Caipi



  • int max ( int const *v, int anzahl)
    {
           //Bestimmung des Maximums
           int max = v[0];
    
           for (int i=1; i<anzahl; ++i)
           {
    
                  if ( v[i] > max) 
                  max = v[i];
    
                 }return max;
    
    }
    

    habe das ganze jetzt auf ++i gestellt und jetzt funktionierts.
    komisch 😃



  • DarkSea schrieb:

    und wenn ich jetzt einen char "testchar" an eine Funktion übergebe, muss ich die funktion in der art schreiben:

    void funktion(char *einchar)
    {}
    
    int main()
    {
    funktion(testchar);
    ....
    

    ich übergebe als einen char, übernehme bei der funktion aber einen zeiger, innerhalb der funktion muss ich dann aber wieder nicht derefferenzieren, da "testchar" quasi ein array von chars ist ? (hab hier nämlich grad so ein programm, welches einen char als zeiger übernimmt, innerhalb der funktion aber den char ohne zu derefferenzieren an einen konstruktor der klasse String übergibt)

    *nach oben schieb weil wahrscheinlich übersehen ?*



  • @DarkSea:

    caipi hat dir doch geantwortet. wenn du mit [] auf einen wert zugreifst, wird automatisch dereferenziert. einchar an sich ist aber ein zeiger.



  • Die chars sind ein Sonderfall. Siehe auch: C++-FAQ - Arrays und Pointer

    Caipi



  • maximum schrieb:

    int max ( int const *v, int anzahl)
    {
           //Bestimmung des Maximums
           int max = v[0];
           
           for (int i=1; i<anzahl; ++i)
           {
                      
                  if ( v[i] > max) 
                  max = v[i];
                  
                 }return max;
            
    }
    

    habe das ganze jetzt auf ++i gestellt und jetzt funktionierts.
    komisch 😃

    musst mal in die FAQ schauen... da steht drin, was der unterschied ist zwischen ++i und i++...



  • Eigentlich existiert die Funktion bereits:

    int max ( int const *v, int anzahl)
    {
       return * std::max_element(v, v + anzahl);
    }
    


  • leech schrieb:

    maximum schrieb:

    int max ( int const *v, int anzahl)
    {
           //Bestimmung des Maximums
           int max = v[0];
           
           for (int i=1; i<anzahl; ++i)
           {
                      
                  if ( v[i] > max) 
                  max = v[i];
                  
                 }return max;
            
    }
    

    habe das ganze jetzt auf ++i gestellt und jetzt funktionierts.
    komisch 😃

    musst mal in die FAQ schauen... da steht drin, was der unterschied ist zwischen ++i und i++...

    In diesem Fall aber mal grad gar keiner.



  • ich wollte ihm ja nur sagen, dass er es nachlesen kann, da ich aus einem seiner oberen post rausgelesen habe, dass er den unterschied nicht kennt...

    [quote = "maximum"]
    habe das ganze jetzt auf ++i gestellt und jetzt funktionierts.
    komisch 😃
    [code]

    mir war klar, dass es keinen unterschied macht.... ist ja ne for-schleife, da ists egal... aber da er rumgerätselt hat, was das problem sein könnte, wollte ich ihm ja nur den unterschied näher bringen...


Anmelden zum Antworten