BlackJack hat geschrieben:@Darii: Wo steht denn das in der Python-Doku?
http://docs.python.org/tutorial/control ... -functions, 5. Absatz, ja ich habe die Fußnote gelesen. Die Konkretisiert aber nur.
Leonidas hat geschrieben:Java hat genausowenig wie Python Zeiger. Es sind Referenzen, aber Referenzen sind keine Pointer.
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).
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.
Ist vielleicht wirklich besser, dann ist wenigsten klar, was ich meine.
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;
}
call-by-reference(c++):
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;
}
PS: Man habe ich mich beim Schreiben dieser Beispiele wieder über die absolut kryptischen Fehlermeldungen vom gcc gefreut...