Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Kleines Problem mit Referenz und Zeiger

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.06.2008, 11:14 Uhr
jp



Hallo,
ich arbeite mich gerade mit einem Buch in C++ ein. Da ist ein kleines Beispiel,
wie man mit Zeigern innerhalb einer Funktion den Wert zweier Variablen vertauscht:


C++:

#include <iostream>
#include <conio.h>

using namespace std;

void swap( int *x, int *y );

int main() {
    int x = 5, y = 10;  
    
    cout << "Vor Vertauschen:\nx = " << x << "\ny = " << y << endl;  
    swap( &x, &y );
    cout << "Nach Vertauschen:\nx = " << x << "\ny = " << y << endl;
    getch();
}    

void swap( int *x, int *y ) {
    int temp;
    
    temp = *x;
    *x = *y;
    *y = temp;    
}    




Jetzt habe ich aber aus versehen beim ersten eintippen beim Aufruf von swap
die Adressoperatoren für die Argumente weggelassen:

C++:
    
int main() {
    ...
    swap( x, y );
    ...  
}



Und es funktioniert trotzdem. Das verstehe ich nicht. So wie ich es bis jetzt verstanden
habe, erwartet die Funktion swap zwei Argumente mit Adressen. Jetzt aber übergebe ich
einfach zwei int-Werte. Wieso funktioniert das?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.06.2008, 13:05 Uhr
kronos
Quotenfisch
(Operator)


Hi,
es gibt auch eine STL-Funktion swap (findest sich in algorithm, ist aber durch iostream offenbar auch included), die zwei Referenzen nimmt.
Diese Funktion verwendest du, wenn du die int statt int* übergibst.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.06.2008, 13:22 Uhr
jp



Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.07.2008, 01:39 Uhr
xXx
Devil


Hm liegt wohl eher am Compiler ... ist von iostream normal nicht eingebunden ...
Aber hier wird mal wieder nen Grund mehr deutlich, warum man sich using namespace sparen sollte. Dann würde es nicht kompilieren!

Warum nimmst du extra nen Header, der nicht im Standard enthalten ist?

C++:
#include <iostream>

void swap(int*, int*);

int main()
{
    int x(5);
    int y(10);  
    
    std::clog << "x = " << x << " :: y = " << y << std::endl;  
    swap(&x, &y);
    std::clog << "x = " << x << " :: y = " << y << std::endl;
    
    std::cin.ignore();
}    

void swap(int* ptr_lhs, int* ptr_rhs)
{
    const int temp(*ptr_lhs);
    *ptr_lhs = *ptr_rhs;
    *ptr_rhs = temp;    
}
... so wäre es doch sauber implementiert.

Die Funktion des Std.:

C++:
#include <iostream>
#include <algorithm>

int main()
{
    int x(5);
    int y(10);  
    
    std::clog << "x = " << x << " :: y = " << y << std::endl;  
    std::swap(x, y);
    std::clog << "x = " << x << " :: y = " << y << std::endl;
    
    std::cin.ignore();
}
...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: