PDA

View Full Version : [Frage] pointer in java?


luthos
15-05-2003, 18:39
hallo leute,

ich hab da eine frage:
ist es in java möglich, bei einem funktionsaufruf einen pointer anstatt dem wert der variablen zu übergeben?
in c kann ich das beim funktionsaufruf mit & machen, aber das scheint in java nicht zu funktionieren...
oder ist da nur die syntax anders?

mein problem ist nämlich, dass es mir nicht gelingt ein array static zu machen; da dachte ich mir ich übergeb einfach einen pointer darauf, aber denkste....
java hat zwar im großen und ganzen eine ähnliche syntax wie c, aber trotzdem funktioniert fast alles anders (bei mir gar nicht); irgendwie fehlt mir da noch der durchblick.

hoffe es kann mir jemand weiterhelfen.

danke im voraus und schöne grüße
luthos

bimbo
15-05-2003, 18:48
1.: wenn man einer funktion ein objekt übergibt, dann is das IMMER ein pointer, ausser es handelt sich um int, boolean, long, double,etc. (auch Strings sind objekte).


mir fällt da auf die schnelle nur eine möglichkeit ein, und zwar, dass du ein objekt, z.b.: Integer machst das einfach einen integer-wert abspeichert. solche objekte gibts aber bereits, im java.lang package.

Humulus
15-05-2003, 19:38
Sers,

In C ist doch auch so wenn ich ein Array übergebe, wird in wirklichkeit seine Adresse übergeben...
und static in C != static in java bist du dir dem bewußt?
wo defienierst dein Array innerhald der main method oder außerhalb?

mit private static int[] x = new int; stimmt nicht genau will jetzt nicht nachschauen
ich vergesse immer wie man ein Array definiert!!

poste am besten dein Code!

Shine
15-05-2003, 21:47
also ganz versteh ich dein problem nicht.
Vielleicht solltest du's mal genauer definieren.

Also das müsste doch gehen, wenn du einfach die referenzvariable zurückgibst oda?? ich mein mir ist zwar bis dato noch keine Funktion unterkommen die ein Array als rückgabewert ghabt hat, aber das müsst schon gehen

int[] test(){}

owa du konnst des array natürlich auch static machen und dann global verwenden. da musst du's dann direkt gleich am Anfan reinschreiben also gleich nach

class Irgendwas
{
static int[] testarray;

// sonstiger Code
}

Probier's mal aus, vielleicht postest dein Prob genauer, es gibt ja vielleicht auch andere möglichkeiten es zu lösen

luthos
16-05-2003, 12:53
Erst mal vielen Dank für Eure Tips!

Ich hab ein Array, das ich in etlichen verschiedenen Funktionen bearbeiten muss, deshalb dacht ich mir wenn ich es static mache, ist das am einfachsten. Das funktioniert jetzt auch; mein Fehler war, dass ich es an der falschen Stelle definiert hab (in main nämlich, nicht vorher).

Aber ich bin jetzt etwas verwirrt, was Pointer betrifft.
1. Mal ganz allgemein, wenn bei Objekten immer ein Pointer übergeben wird, heißt das, ich kann dieses Objekt direkt aus meiner Funktion heraus bearbeiten ohne etwas returnen zu müssen (so wie in C halt)?
und
2. In C kann ich mir zb einen Pointer machen, der auf einen bestimmten Speicherbereich zeigt und mit selbigem dort etwas hineinschreiben. Kann ich das in Java auch? (ich nehm an Windows wird das nicht zulassen, aber rein theoretisch) und wenn ja, wie würde da der Code aussehen?

Hoffe die Fragen sind nicht allzu blöd...

Grüße
luthos

Flowyes
16-05-2003, 13:52
Zu 1.
Das geht sicher.
2. Es stimmt nicht ganz, wenn man sagt in Java gibt's keine Pointer (das hört man oft). Es gibt zwar nur Referenzen die aber nicht anderes als Pointer sind (aber das ist eh klar glaub ich, nur zur Sicherstellung) Aber diese Referenzen sind in Java in einer höheren Ebene (deswegen sagt man glaub ich Referenzen und nicht Pointer), also mit den Referenzen kann man in Java nur die Funktionalität von Objekten manipulieren, auf den Speicherbereich hast du jedoch keinen direkten Zugang... Arithmetische Operationen auf Addressbereichen oder so sind zum Beispiel auch nicht möglich. Objekte werden in Java grundsätzlich auf Heaps angelegt und hier ist es weder möglich explizite allocations zu machen, noch dass der Programmierer die Objekte selber zerstört. Das macht dann der Garbage Collector.
Ich hoffe, dass ich terminologisch nichts falsches gesagt hab ;) aber so ist das ungefähr...