Problem mit Referenzen
-
HughJazz schrieb:
Also, wenn ich mir sowohl in main als auch in b Inhalt und Speicheradresse mit printf ausgeben lasse stimmen diese Werte nicht überein.
Du musst in b natürlich *x benutzen. Hast du das getan? Zeig doch mal den Code.
-
HughJazz schrieb:
wow, das ging ja schnell
Also, wenn ich mir sowohl in main als auch in b Inhalt und Speicheradresse mit printf ausgeben lasse stimmen diese Werte nicht überein.
Falls es wichtig ist: die Software läuft und kompiliert unter Linux.
in b um Speicheradresse auszugeben:
cout << x;in main um Speicheradresse auszugeben:
cout << &xweil in b ist der Inhalt von x die Speicheradresse von x in Main.
in main ist der Inhalt von x der entsprechende Wert. Wie in dem Beispiel unten z.B. 4void b(int* x) { cout << x << endl; } void a(int* x) { b(x); } int main() { int x; x=4; a(&x); cout << &x << endl; cin.get(); }
so bekommst du 2mal dieselbe Speicheradresse ausgegeben
-
Ich hab mich gerade mal aufklären lassen wieso das nicht gehen kann: Die beiden Funktionen laufen in unterschiedlichen Prozesse die untereinander mit messages kommunizieren. Jetzt wird das Ganze wohl doch ein bischen komplizierter...
Danke für eure Hilfe
-
ANSI C kennt Streams? Oha ...
#include <stdio.h> void foo(int* x) { printf(".foo: %p => %d", x, *x); bar(x); } void bar(int* x) { printf(".bar: %p => %d", x, *x); } int main() { int x = 4; printf(".main: %p => %d", &x, x); foo(&x); getchar(); }
...
-
Ich glaube in der Überschrift gelesen zu haben "Problem mit Referenzen"
int* ist aber ein Pointer keine Referenz
int& ist die Referenz
Alsovoid b(int& x) { cout << x; cin.get(); } void a(int& x) { b(x); } int main() { int x; x=4; a(x); }
-
Nur das es in AnsiC keine Referenzen gibt.
-
Braunstein schrieb:
Nur das es in AnsiC keine Referenzen gibt.
C kennt keine 'reference types' im sinne von C#, Java o.ä. in C nimmt man eben pointer dafür. der wichtigste unterschied ist ja nur, dass bei referenzen mit verweisen auf objekte gearbeitet wird, während bei 'by value' das objekt selber kopiert wird.
int a; ... f (a); // call 'by value', das objekt selbst wird kopiert g (&a); // call 'by reference', es wird ein verweis auf das objekt übergeben
-
Und bei g() übergibst du ein Objekt "by value" vom Typ T*.
-
Tim schrieb:
Und bei g() übergibst du ein Objekt "by value" vom Typ T*.
ja, das ist aber technisch bedingt. die referenz bzw. der pointer wird 'bei value' übergeben. es ändert aber nichts an der referenzsemantik, die dahinter steckt.
-
Es geht hier auch mehr um Terminologie als um Semantik.
Edit: Aber ich erwarte nicht (mehr), dass du das verstehst.
-
Tim schrieb:
Es geht hier auch mehr um Terminologie als um Semantik.
ist doch kein problem:
ISO/IEC 9899:1999 schrieb:
A pointer type describes an object whose value
provides a reference to an entity of the referenced type.
-
Also findest du auch das "call by reference" von dem du hier immer redest?
-
Tim schrieb:
Also findest du auch das "call by reference" von dem du hier immer redest?
wo? im C-standard? nein, aber wieso sollte 'call by reference' dort ausdrücklich erwähnt sein? wenn referenzsemantik in C mit pointern ermöglicht wird, sollten damit auch 'calls' gehen. ich weiss gar nicht, warum du damit solche schwierigleiten hast, oder meinst du den 'referenzbegriff' haben pointerlose programmiersprachen für sich gepachtet?
-
Green Heaven schrieb:
Tim schrieb:
Also findest du auch das "call by reference" von dem du hier immer redest?
wo? im C-standard? nein, aber wieso sollte 'call by reference' dort ausdrücklich erwähnt sein? wenn referenzsemantik in C mit pointern ermöglicht wird, sollten damit auch 'calls' gehen. ich weiss gar nicht, warum du damit solche schwierigleiten hast, oder meinst du den 'referenzbegriff' haben pointerlose programmiersprachen für sich gepachtet?
Es geht aber darum die Technik zu begreifen, die dahinder steht. C kennt nunmal kein "by reference", in C wird alles kopiert.
Was sind eigentlich "pointerlose programmiersprachen"? Kann man sich eine Sprache ohne Pointer ueberhaupt noch vorstellen?
-
DEvent schrieb:
Es geht aber darum die Technik zu begreifen, die dahinder steht. C kennt nunmal kein "by reference", in C wird alles kopiert.
in anderen programmiersprachen nicht? sind referenzen nicht überall bloss pseudo-pointer?
DEvent schrieb:
Kann man sich eine Sprache ohne Pointer ueberhaupt noch vorstellen?
es gibt viele, die ohne auskommen.