[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 ?*
-
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.
komischmusst 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.
komischmusst 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...