http://docs.python.org/tutorial/control ... -functions, 5. Absatz, ja ich habe die Fußnote gelesen. Die Konkretisiert aber nur.BlackJack hat geschrieben:@Darii: Wo steht denn das in der Python-Doku?
Java-Referenzen sind Pointer, bloß dass die Sprache die De-/Referenzierung automatisch übernimmt. Ich halte das für eine reine Marketingentscheidung, das Kind Referenz zu nennen. Nicht umsonst gibt es eine „NullPointerException“ in Java. Und Java-„Referenzen“ sind etwas anderes als C++ Referenzen, was dann wirklich call-by-reference ist. Ich halte es da wie beim Duck-Typing, es verhält sich wie ein Pointer, also ist es einer (der Vergleich hinkt ein bisschen).Leonidas hat geschrieben:Java hat genausowenig wie Python Zeiger. Es sind Referenzen, aber Referenzen sind keine Pointer.
Ist vielleicht wirklich besser, dann ist wenigsten klar, was ich meine.Ich habe anfangs auch den Unterschied zwischen Call-by-Reference und Call-by-Object nicht verstanden, und den Begriff für Überflüssig gehalten, aber wenn man genauer nachdenkt sind es durchaus zwei verschiedene Dinge (ich empfehle in C einen Pointer-to-int zu übergeben und die innerhalb der Funktion zu modifizieren und dann in Python eine Zahl übergeben und das zu modifizieren um sich die Unterschiede klar zu machen.
call-by-value(c):
Code: Alles auswählen
#include <stdio.h>
int dummy = 42;
int *bar = &dummy;
void function(int *foobar) {
foobar = bar; // Ich überschreibe den Wert von foobar
// dasselbe passiert auch in Java und Python
}
int main(void) {
int foo = 23;
printf("foo = %d\n", foo);
function(&foo);
printf("foo = %d\n", foo);
return 0;
}
Code: Alles auswählen
#include <cstdio>
int bar = 42;
void function(int &foobar) {
foobar = bar;
}
int main(void) {
int foo = 23;
printf("foo = %d\n", foo);
function(foo);
printf("foo = %d\n", foo);
return 0;
}