In C kein Call by reference?
-
Dann trennt uns die Definition von call by reference.
-
GPC schrieb:
Dann trennt uns die Definition von call by reference.
pointerlose sprachen-coder eh?
bei euch sind die referenzen auch bloss geschickt getarnte zeiger
-
Undertaker schrieb:
GPC schrieb:
Dann trennt uns die Definition von call by reference.
pointerlose sprachen-coder eh?
Nö. Als Wald-und-Wiesen Coder erfreue ich mich regelmäßig an C und C++.
bei euch sind die referenzen auch bloss geschickt getarnte zeiger
Das mag sein, ändert aber nichts an den Unterschieden der beiden.
-
GPC schrieb:
bei euch sind die referenzen auch bloss geschickt getarnte zeiger
Das mag sein, ändert aber nichts an den Unterschieden der beiden.
Ihr habt beide recht, es gibt nämlich für euch beide jeweils einen Fall, in dem ihr recht habt:
void func( int & iref ) { } int main( void ) { int i; int & ir = i; func( i ); // call by reference func( ir ); // call by value }
Bei func(i) wird tatsächlich eine Referenz erzeugt und dann auf den Stack geschrieben. Punkt für GPC.
Im zweiten Fall wird die Referenz allerdings als Zeiger gespeichert. 'ir' ist intern ein Zeiger und der wird kopiert. ir ist also ein Zeiger-Value: Call by Value. Punkt für Undertaker.Referenz ist nur ein anderes Wort für Zeiger. C++-Referenzen unterscheiden sich von Zeigern oder Java-Referenzen dadurch, dass sie gültig initialisiert werden müssen und daher statt als Zeiger wie ein Value behandelt werden.
C kann lediglich Zeiger/Referenzen kopieren, aber keine selbständig erzeugen. Man muss sie in der Expression selbst erzeugen und diese Value wird anschließend kopiert.
Was passiert ist identisch. Die Frage ist, ob die Referenz von der Sprache erzeugt wird oder ob ein Value vom Typ Zeiger kopiert wird.
-
Schwachsinn. Sorry. Aber func() hat call by reference.
Dass es referenzen in C nicht gibt, ignorieren wir mal. Wie diese intern dagestellt werden, ist Implementationssache. Eine Referenz ist ein Aliasname, ergo kann sie nicht kopiert werden. Wie das implementiert wird, ist komplett egal. 99% aller systeme werde eine referenz als zeiger implementieren aber das ist für die betrachtungsweise ja egal. denn wir reden ja auch von klasse die es in der implementierung eines systems dann nicht mehr gibt.
in C gibt es keine call by reference im absoluten sinn. aber durch zeiger kann man das schön umgehen indem man eben den zeiger by value übergibt. logischerweise wird das oft call by reference genannt, was nicht stimmt.
aber ich wiederhole nur was tim und gpc sagen... ergo sollte der hausverstand sagen wer hier recht hat.
-
Shade Of Mine schrieb:
Eine Referenz ist ein Aliasname, ergo kann sie nicht kopiert werden.
nö, eine referenz ist ein 'verweis' auf irgendetwas, mehr nicht.
natürlich kannst du sie kopieren, z.b. zwei oder mehr verweise auf das gleiche objekt haben, bzw. ob referenzen kopiert oder verändert werden dürfen, legt die jeweilige programmiersprache für sich (und nicht für andere) fest.
in C wird das über pointer geregelt und die kann man nun mal kopieren und umbiegen.Shade Of Mine schrieb:
ergo sollte der hausverstand sagen wer hier recht hat.
na, du machst es dir aber einfach
btw, in C gibt es auch 'vektoren'. nun rate mal was das ist...
-
Undertaker schrieb:
btw, in C gibt es auch 'vektoren'. nun rate mal was das ist...
Sowas?
typedef struct{ double x; double y; double z; } vector3D_t;
-
Undertaker schrieb:
nö, eine referenz ist ein 'verweis' auf irgendetwas, mehr nicht.
natürlich kannst du sie kopieren, z.b. zwei oder mehr verweise auf das gleiche objekt haben, bzw. ob referenzen kopiert oder verändert werden dürfen, legt die jeweilige programmiersprache für sich (und nicht für andere) fest.
in C wird das über pointer geregelt und die kann man nun mal kopieren und umbiegen.Es geht hier nicht um irgendeine sprache, sondern um C++. Und da ist es sehr wohl so, dass referenzen nur alias namen sind und nicht kopierbar sind. In Java ist es komplett anders - aber draussen ist es auch kälter als nachts.
na, du machst es dir aber einfach
btw, in C gibt es auch 'vektoren'. nun rate mal was das ist...
Du willst nur trollen oder? Ist aktzeptiert.
Du solltest aber mal lernen dass es unterschiede zwischen einer Sprache und einer Implementierung gibt. Referenzen sind Aliasnamen. Ich kann mit einer Referenz nichts machen - sie nicht umbiegen, sie nicht kopieren, sie nicht zerstören, etc.
Also bitte, erzähl den Leuten hier keinen Blödsinn. Danke.
-
Tim schrieb:
Undertaker schrieb:
btw, in C gibt es auch 'vektoren'. nun rate mal was das ist...
Sowas?
typedef struct{ double x; double y; double z; } vector3D_t;
leider falsch.
Shade Of Mine schrieb:
Es geht hier nicht um irgendeine sprache, sondern um C++.
ohne ++
Shade Of Mine schrieb:
Ich kann mit einer Referenz nichts machen - sie nicht umbiegen, sie nicht kopieren, sie nicht zerstören, etc.
in C geht zumindest das umbiegen und kopieren. wie gesagt, in C (ohne ++).
-
Undertaker schrieb:
Shade Of Mine schrieb:
Es geht hier nicht um irgendeine sprache, sondern um C++.
ohne ++
Siehst du. Das ist dein Problem. Du machst einen Fehler, gibst ihn aber nicht zu. Es geht hier zufällig um C++ auch wenn wir im C Forum sind. Macht nichts, irgendwann wirst du es schon lernen. Bis dahin, frag ruhig weiter wenn du dich nicht auskennst.
in C geht zumindest das umbiegen und kopieren. wie gesagt, in C (ohne ++).
Interessant. Dann zeig mir mal eine Referenz in C.
Und zeig mir mal deine öminösen vectoren.Aber um ehrlich zu sein - ich mach hier zu, es ist einfach zu lächerlich was hier abgeht. Ich hoffe dem OP konnte geholfen werden.