Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Referenzen und Globale Variablen

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
07.11.2006, 15:13 Uhr
alex309



hallo,

warum erzeugt man eigentlich Referenzen, wenn man dafür globale Variablen verwenden kann?

C++:
//int a=2;
//int b=5;

int main()
{
int a=2;
int b=5;

cout<<"a = "<<a<<"\nb = "<<b<<"\n";
tausche(a,b);
cout<<"a = "<<a<<"\nb = "<<b<<"\n";
getch();
}

void tausche(int& a, int& b)      
{                                        
int temp=a;                          
a=b;                    
b=temp;                              
}                                          
                                        
//void tausche(int c, int d)
//{
//int temp = c;
//c = d;
//d = temp;
//a = c;
//b = d;
//}


Dieser Post wurde am 07.11.2006 um 15:15 Uhr von alex309 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.11.2006, 19:39 Uhr
mischa
Fragender


deine frage deckst sich nicht ganz mit deinem code :/
also
wenn du in einer funktion sowas hast z.B. foo(int a), dann übergibst du nur eine kompie der variable an die funktion die du bei dem aufruf von foo angibst. du kannst dan die kopie so viel verändern wie du wilst die variable an sich wird nicht verändert. wenn du aber eine referenz übergibst kannst du in der funktion die eigentliche variable verändern.
wenn du aber einfach eine globale variable erstellst kannst du halt überall auf sie zugreifen und verändern aber eine funktion die blos eine globale variable verändert kriegt nichts übergeben und kann keine andere verändern
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.11.2006, 12:40 Uhr
kronos
Quotenfisch
(Operator)


Abgesehen davon sollte man immer
C++:
#define swap(x,y)x^=y^=x^=y
verwenden
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 08.11.2006 um 12:41 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.11.2006, 14:01 Uhr
stephanw
localhorst


@kronos: ist das Dein Ernst ?
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.11.2006, 19:45 Uhr
kronos
Quotenfisch
(Operator)


Nein
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.11.2006, 20:06 Uhr
stephanw
localhorst


Dann sollte das nicht als Antwort auf die Frage eines Unbedarften erscheinen, der die Ironie vielleicht nicht erkennt ;-) Also, @alex309: für das Werte-Tauschen kein Macro (#define...) benutzen, sondern lieber das hier:

C++:
#include <algorithm>
void f()
{
  int a = 2;
  int b = 5;
  // ...
  std::swap( a, b );
  // ...
}


--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.11.2006, 15:55 Uhr
alex309




Zitat von mischa:

aber eine funktion die blos eine globale variable verändert kriegt nichts übergeben und kann keine andere verändern



Ich kann doch in einer funktion globale variablen ändern wie ich will und ihr übergeben was ich will.

Ich verstehe ja schon was referenzen sind und dass die funktionsparameter (nicht referenziert) nur kopien der variablen sind.

In meinem beispiel sind doch 2 globale variablen (auskommentiert) und die auskommentierte funktion benutzt sie.

Das beispiel habe ich aus einem tutorial, so jetzt noch mal zu meiner frage:
Warum nimmt man hier(in dem beispiel) keine globale variablen? Sollte man Referenzen verwenden anstatt globale variablen?

und um swap geht es mir im moment auch nicht, wie gesagt ist ein beispiel aus einem tutorial. (aber trotzdem danke )

mfg
alex

Dieser Post wurde am 09.11.2006 um 15:57 Uhr von alex309 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
09.11.2006, 16:41 Uhr
ao

(Operator)



Zitat von alex309:
Warum nimmt man hier(in dem beispiel) keine globale variablen?

Weil globale Variablen fast immer Mist sind. Die sollte man wenn überhaupt nur mit allergrößter Zurückhaltung verwenden.

Bei Trivialprogrämmelchen, wie sie in Tutorials drinstehen, merkt man das noch nicht, aber in größeren Applikationen dürfen die einzelnen Teile nur über definierte Schnittstellen miteinander kommunizieren. Wenn die das über globale Objekte täten, gäbe das ein Riesenkuddelmuddel.

Eine echte Applikation schreibt man ja auch nicht, damit sie zwei Werte vertauscht, sondern das ist eine winzige Funktion, die man an hundert Stellen braucht. Darum verwendet man Parameter, damit man der Funktion mitteilen kann, *welche* zwei Werte getauscht werden sollen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.11.2006, 15:36 Uhr
alex309



danke dir!

das habe ich auch so in einem buch gelesen, das mit dem kuddelmuddel
wird mir dann schon klar werden, wenn es soweit ist.
mfg
alex
 
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: