swap-Methode und Einsteiger-Fragen
-
Hallo allerseits,
bin neu hier und habe gleich mal ein paar simple Fragen. Habe zwar schon mal ein bißchen was mit C++ gemacht, will aber jetzt mir die Grundlagen nochmal genauer anschauen.
extern "C" void c_swap(int *a, int *b){ // doesn't work int *c=a; a=b; b=c; } template< class T > void t_swap(T& a, T& b) { T c=a; a=b; b=c; } int main(){ // Initialisierung int num1 = 5; int num2 = 10; cout << "\nBefore:\nnum1: " << num1 << "\nnum2: " << num2; //t_swap(num1,num2); // also possible / explicit //t_swap<int>(num1,num2); //C-Style //cout << "\n&num1: " << &num1 << "\n&num2: " << &num2; //c_swap(&num1,&num2); //cout << "\n&num1: " << &num1 << "\n&num2: " << &num2; //print result cout << "\n\nAfter:\nnum1: " << num1 << "\nnum2: " << num2; int nothing; cin>> nothing; }Wieso funktioniert die Funktion c_swap nicht?
Was bedeutet extern 'C' genau?
Kann man die t_swap Methode auch mit Pointer schreiben und macht das Sinn?
Wie bringe ich noch einmal Visual C++ / Windows dazu mir am Schluss die Meldung auszugeben "Drücke beliebige Taste" oder anders gefragt wie schreibe ich die letzte Zeile besser?Danke und Grüße
-
yabba schrieb:
Wieso funktioniert die Funktion c_swap nicht?
Parameter werden per Kopie übergeben - und du tauschst nur die lokalen Pointer aus. Richtig müsste die Funktion so aussehen:
void c_swap(int*a,int*b) { int c=*a;*a=*b;*b=c; }Was bedeutet extern 'C' genau?
Das gibt an, daß die Funktion nach C-Regeln definiert ist (keine Überladungen, keine Templates, etc.) und möglicherweise auch in C Programmen genutzt werden sollte.
Kann man die t_swap Methode auch mit Pointer schreiben und macht das Sinn?
Man kann (sieht dann ähnlich aus wie oben, nur daß überall 'int' durch 'T' ersetzt wird), aber es macht wenig Sinn. Schließlich ist der Umgang mit C++ Referenzen einfacher als mit C Pointern (das war auch der Grund, warum du dich bei der c_swap() in die Nesseln gesetzt hast ;)).
Wie bringe ich noch einmal Visual C++ / Windows dazu mir am Schluss die Meldung auszugeben "Drücke beliebige Taste" oder anders gefragt wie schreibe ich die letzte Zeile besser?
In der Konsolen-FAQ gibt es einen Beitrag zum Thema "automatisches Schließen verhindern".