frage zu: int&
-
Hi Leute kann mir jemand folgendes erklären:
#include <iostream.h> void zuweisen(int&,int&); main() { int Wert1,Wert2; zuweisen(Wert1,Wert2); cout<<"Wert1= "<<Wert1<<" Wert2= "<<Wert2; //Wert1= 2 Wert2= 3 } void zuweisen(int& v1,int& v2) { v1=2; v2=3; }
Was passiert hier?, wieso verändert die funktion "zuweisen();" , Wert1 und Wert2, und warum eigentlich "int&" <-hat bestimt was mit zeigern zu tun oder liege ich da falsch?!
Bin ein C guru und fang grad mit C++ anthx for your help
mfg hohesC
-
hat bestimt was mit zeigern zu tun oder liege ich da falsch?!
Nein, hat was mit zeigern zu tun.
"v1" zeigt auf "Wert1".
C++ ist das etwas leichter geworden.
man braucht in diesem fall keine * mehr.Edit: <iostream> nicht <iostream.h>!
Edit: Der Morgen
-
wieso verändert die funktion "zuweisen();" , Wert1 und Wert2, und warum eigentlich "int&"
Die beiden Fragen könnten etwas miteinander zu tun haben.
Die Funktion ändert die Werte, weil da "int&" steht. Und ja, es hat was mit Zeigern zu tun. Oder besser gesagt: Mit Referenzen. So kopiert die Funktion nicht die Werte, sondern ändert den Inhalt deiner übergebenen Variablen.
(Tjo, Green_Ghost war schneller. Egal. :p )
-
Green-Ghost schrieb:
<iostream> nicht <iostream.h>
ich weis aber mein Compiler MSVC++ 6.0 schmeisst mir fehler hin und kennt meine cout etc. alle funktionen die in iostream definiert sind nicht mehr, wenn ich ihm nicht die endung gebe.
@HEZ: Mir war schon klar das int& was mit der anderen Frage zu tun hat
!
aber was passiert genau bekommt v1 und v2 die adresse von Wert1 und Wert2 zugewiesn? Ist v1 somit ein Zeiger auf Wert1 und v2 ein Zeiger auf Wert2?
thx mfg hohesC
-
hohesC schrieb:
...ich weis aber mein Compiler MSVC++ 6.0 schmeisst mir fehler hin und kennt meine cout etc. alle funktionen die in iostream definiert sind nicht mehr, wenn ich ihm nicht die endung gebe....
dann probiere es doch mal mit: 'std::cout' oder 'using std::cout' oder 'using namespace std'
-
@enno-tyrant: Danke jetzt gehts.
Nächste Frage std:: (bedeutet standard???) was macht std::???
PS.:zwei fragen von oben sind noch offen!mfg hohesC
-
hohesC schrieb:
...Nächste Frage std:: (bedeutet standad???) was macht std::???
...naja es bedeutet standard
std ist eine Klasse und genauso wie du funktionen einer 'normalen' klasse aufrufst, rufst du auch die funktionen der klasse std auf.
klasse::methode
hohesC schrieb:
...zwei fragen von oben sind noch offen!...
v1 und v2 werden zeiger auf die adresse von wert1 und wert2, sie verändern den inhalt der adresse (sprich die variable selbst und eben keine kopie der variable)
-
v1 und v2 werden zeiger auf die adresse von wert1 und wert2, sie verändern den inhalt der adresse (sprich die variable selbst und eben keine kopie der variable)
also bekommen Wert1 und Wert2 die adressen von v1 und v2 zugewiesen???
oder wird einfach bloß der Inhalt verändert und nicht die Adresse???PS: bei klassen bin ich noch nicht! aber ich kanns nachvollziehen!
mfg hohesC
-
using namespace std;
hab ich grad in nem anderen post gesehen! kann ich mir damit das std:: sparen???
Was passiert dadurch???ich weis ich hab viele fragen
mfg hohesC(++)
-
für fragen ist das board ja da
mit 'using namespace std;'
weißt du deinem compiler an jede funktion die er nicht kennt in den std-namensräumen der include-dateien zu suchen.
und ja, dadurch kannst du dir jedes 'std::' sparen.
hohesC schrieb:
...also bekommen Wert1 und Wert2 die adressen von v1 und v2 zugewiesen???...
nein, v1 und v2 bekommen die adresse von wert1 und wert2
hohesC schrieb:
...oder wird einfach bloß der Inhalt verändert und nicht die Adresse???...
die adresse wird auf keinen fall verändert -> wäre ja schlimm
-
Ich schrieb:
aber was passiert genau bekommt v1 und v2 die adresse von Wert1 und Wert2 zugewiesn? Ist v1 somit ein Zeiger auf Wert1 und v2 ein Zeiger auf Wert2?
dann hatte ich ja hier mit recht!
ok danke mfg hohesC
-
enno-tyrant, du scheinst die Sprachkonzepte selbst noch nicht verstanden haben.
std ist keine Klasse und if ist keine Schleife. Nicht gut, das den Neulingen einzutrichtern.
-
demzufolge wären bei dir 'struct' oder 'union' auch keine klassen
nur weil es nicht mit 'class bla' beginnt.
schauen wir uns doch mal den aufbau eines namensraumes an:
namespace util { int zaehler; void sucheAnfang(string s); int sucheEnde(string s); }
kann mir nicht helfen aber irgendwie erinnert mich das an etwas.
es sollte einfach nur als vergleich dienen
und wer sagt das if eine schleife wäre?
-
Er hat doch nicht von if schleife gesprochen(oder ist das aus einem andern Thread?), ich wüsste ausserdem selber das if nix mit schleifen zu tun hat.
Ich bin nur C++ neuling aber nicht programmier neuling, da ich in C Programmiere!was ist std:: dann kan das mir jetzt irgendwer verklickern?
mfg hohesC
-
ich bin ja nichtmal der einzige der klassen und namensräume zum vergleichen/erklären nimmt
http://www.willemer.de/informatik/cpp/cppnames.htm schrieb:
Einzelfunktion
Die Funktion sucheEnde() wurde nicht in der Datei util.cpp definiert. Wenn sie an anderer Stelle implementiert wird, kann der zugehörige Namensraum auch so gekennzeichnet werden, wie es bei Elementfunktionen von Klassen gemacht wird.
-
Sie damit zu erklären ist was anders als zu behaupten sie wären es. Ich sag dir ja auch nicht dass ein Fahrrad ein Auto ist nur weil's auf der Straße fährt.
http://www.c-plusplus.net/forum/viewtopic.php?p=720341#720341
-
enno-tyrant schrieb:
demzufolge wären bei dir 'struct' oder 'union' auch keine klassen
nur weil es nicht mit 'class bla' beginnt.
schauen wir uns doch mal den aufbau eines namensraumes an:
namespace util { int zaehler; void sucheAnfang(string s); int sucheEnde(string s); }
kann mir nicht helfen aber irgendwie erinnert mich das an etwas.
es sollte einfach nur als vergleich dienen
und wer sagt das if eine schleife wäre?
Nein, ist keine Klasse, sondern ein Namespace. Steht doch da?! Nur weil ein Motorrad und ein Fahrrad auch zwei Räder haben, sind sie doch nicht das gleiche Ding, oder?
Das deine Beispiele "gleich" aussehen und an etwas erinnern, hat sicherlich damit zu tun, das es etwas mit Compilerbau zu tun hat um leichter den Code zu parsen. Man kann ja nicht für jeden Mist eine neue Syntax einführen, ganz davon abgesehen, das man als Programmierer sich den Mist auch noch merken müsste.
Also, namespaces sind keine Klassen. Man kann sie auch nicht instanzieren, wie Klassen. Somit ist deine Argumentation schon mal hinfällig.
-
ach den thread hast du gemeint, war beim schreiben wohl mit den gedanken woanders
und was heißt ich behaupte es wäre eine klasse? hast du den gesamten thread gelsen? zugegeben ich hatte mich etwas unverständlich ausgedrückt aber zu verstehen war es dennoch
-
@endline er hat seine "if-schleife" korigiert
http://userpage.fu-berlin.de/~ram/pub/pub_w33d45lg/c++_namensraum_de
ich google nächstes mal einfach! :p
mfg hohesC
-
Alles, aber hauptsache nicht den eigenen Fehler eingestehen. Mann, du bist doch auch nur ein Mensch.