Geschwindigekits-Vorteil Pointer
-
unskilled schrieb:
seit wann kann man in C++ arrays per value übergeben ohne hilfsklassen zu nutzen?
zu dem:
so müsste es heißen:
int *arraypointer = &array[0];
oder gleich so:
int *arraypointer = array;
und dann sieht man auch schon, dass das array eh nur ein pointer ist und nicht ohne weiteres kopiert werden kann...bb
"Achtung Pseudocode!"
-
Artchi schrieb:
Es gibt in C++ eigentlich keine Spracheigenschaften, die explizit für "damit es extra schneller geht" gemacht sind.
Das Schlüsselwort register
Das Schlüsselwort inline
Die Array-Übergabe per Zeiger
-
Ok, da habe ich mich was die Verwendung von Zeigern angeht wohl deutlich geirrt, in der Zwischenzeit ist noch etwas aufgetaucht und zwar möchte ich einmal folgenden Code-Ausschnitt zeigen wo das Hauptaugenmerk bitte auf default: zu legen ist:
#include <iostream> using namespace std; int choice; void menu() { switch (choice) { case 1: cout << "TestA gewealt!"; break; case 2: cout << "TestB gewealt!"; break; case 3: cout << "TestC gewealt!"; break; default: system("cls"); cout << "Falscher Wert wurde eingegeben! \n"; menu(); break; } } int main () { cout << "[Test-Application - Bitte waehlen:]" << endl; cout << endl; cout << "[1] TestA" << endl; cout << "[2] TestB" << endl; cout << "[3] TestC" << endl; cin >> choice; menu(); return 0; }Auszug:
default: system("cls"); cout << "Falscher Wert wurde eingegeben! \n"; menu(); break; }Mein Gedanke dahinter war recht einfach: Sobald eine Fehleingabe gemacht wird soll zur Auswahl zurückgekehrt werden, leichter gesagt als getan ^^
Wenn ich einfach die menu(); wieder aufrufe bleibt er dabei hängen, also wo ist der Fehler?
(Ich wollte jetzt nicht noch einmal extra einen neuen Thread eröffnen)
-
life schrieb:
"Achtung Pseudocode!"
Danke auf das wollte ich auch grade aufmeksam machen. Das nächste mal mache ich es fett und färbe es rot ein

-
So,
bin in meinem kleinen Menü-Problem von oben schon etwas weiter gekommen das ist der Aktuelle Stand:#include <iostream> #include <conio.h> using namespace std; int choice; int error_count; // Counter für Fehl-Eingaben void usr_in() { system ("cls"); cout << "[Test-Application - Bitte waehlen:]" << " Fehler: " << error_count << endl; cout << endl; cout << "[1] TestA" << endl; cout << "[2] TestB" << endl; cout << "[3] TestC" << endl; cin >> choice; cout << "\n"; } void check_error() { if (error_count == 1) { choice = 4; error_count = 0; usr_in(); } } void menu() { switch (choice) { case 1: cout << "TestA gewealt!"; break; case 2: cout << "TestB gewealt!"; break; case 3: cout << "TestC gewealt!"; break; default: if (error_count < 1) { error_count ++; // Eine Fehl-Eingabe hinzuzählen } check_error(); system("cls"); cout << "Falscher Wert wurde eingegeben! \n"; getch(); usr_in(); menu(); break; } } int main () { usr_in(); menu(); return 0; }Problem derzeit:
Sobald ein Buchstabe eingegeben wird endet das ganze in einer Endlos-Schleife - Dafür hatte ich einen Fehler-Counter eingebaut nur leider funktioniert dieser nicht so wie er ist. Mein Gedanke dabei:
Sobald eine Fehl-Eingabe getätigt wird ist "default:" zuständig, also erhöhe ich einfach den Wert des Error-Zählers um 1eins, stößt er nun ein zweites mal auf diese Ebene und der Error Zähler ist schon 1 wird der Eingegebenen-Variable einfach wieder eine Zahl zugewiesen so das der Buchstabe nicht mehr vorkommen kann, dann wird wieder alles "resetet" und das ganze sollte wieder gehen - leider fehlanzeige!?
-
Tätest Du das alles in die main() hauen, wär's aber hübscher und die Probleme wären auch weg. Oder in eine Funktion namens menu.
Die klassische Menuschleife geht übrigens so:"Achtung Pseudocode"bool willnochmal do eingabe switch case tuwas case tuwasandres default beschimpfe benutze while willnochmal
-
volkard schrieb:
Artchi schrieb:
Es gibt in C++ eigentlich keine Spracheigenschaften, die explizit für "damit es extra schneller geht" gemacht sind.
[...]
Die Array-Übergabe per ZeigerDamit kommen wir wieder ganz an den Anfang zurück. Zeiger sind nicht nur dafür da, dass es schneller geht.
Es war wohl eher sowas gemeint:
int add(int a, int b) { int result; fast { result = a + b; } very fast { return result; } }
-
orlor schrieb:
life schrieb:
"Achtung Pseudocode!"
Danke auf das wollte ich auch grade aufmeksam machen. Das nächste mal mache ich es fett und färbe es rot ein

deshalb war das &arr[0] auch nur so am rande - aber die übergabe eines arrays als bsp zu nutzen ist einfach falsch...
-
orlor schrieb:
Hier würden bei funktion1 die ganzen 20MB im Speicher kopiert und die Kopie an Funktion1 übergeben. Bei funktion2 wird hingegen nur der Pointer (32Bit = 4byte) übergeben was soch um einiges schneller ist (zusätzlich spart es speicher
).Falsch. Ein Pointer hat prinzipiell keine Größe von 32Bit. Ein Pointer ist immer so groß wie das Maschinenwort!
-
XaTrIxX schrieb:
Ein Pointer ist immer so groß wie das Maschinenwort!
Nö.