Referenz -> Referenz auf Pointer?
-
Dann geht das ja nicht.
-
dann eben einen pointer auf einen pointer.
-
Dann lautet die Frage aber: Warum überhaupt Referenzen? und nicht: Warum Referenzen auf Pointer?

-
Dann geht das ja nicht.
warum?
-
sinn schrieb:
warum?
Weil du dann nur die lokale Kopie des Pointers verändern kannst, aber nicht das Original.
-
void change(int *value1, int *value2) { *value2 = *value1; } int main() { int zahl1 = 1; int zahl2 = 2; int *pzahl1 = &zahl1; int *pzahl2 = &zahl2; change(pzahl1, pzahl2); }ich ändere hier ja die orginale kopie? -> call by reference?
-
Zeiger werden immer Call by Value übergeben
Referenzen immer Call by Reference - darum heißen die Dinger ja auch so
-
void makeNewData(int *& feld) { feld = new int[100]; }@sinn: Abgesehen davon dass das schöner geht versuch das ohne Referenz (_und_ ohne Indirektion)

-
das schau ja nett aus...
aber ich verseh diesen satz nicht:
Weil du dann nur die lokale Kopie des Pointers verändern kannst, aber nicht das Original.
zeig mal ein beispiel!
-
wie willst du das schöner machen, außer ohne in einen konstr. zu packen?
Indirektion?
-
aber ich verseh diesen satz nicht:
ich glaub dir ist einfach nicht klar das ein Zeiger Call by Value übergeben wird
-
Es wurden eigentlich schon Beispiele gezeigt...
Aber ich glaube, dir ist der Unterschied zwischen einem Pointer und dem Objekt, auf das der Pointer zeigt, nicht klar.
Bsp:
#include <iostream> void foo(char * p2) { std::cout << "in foo: " << p2 << std::endl; p2++; std::cout << "in foo: " << p2 << std::endl; } int main() { char str[] = "Hallo"; char * p = str; std::cout << "in main: " << p << std::endl; foo(p); std::cout << "in main: " << p << std::endl; }Als erstes wird ein Pointer auf ein char-Array mit dem Inhalt "Hallo" angelegt (besser gesagt ein Pointer auf das erste Element des Arrays).
Dann wird der String mittels dem Pointer ausgegeben, wie zu erwarten erscheint ein "Hallo".
Anschließend wird die Funktion foo mit diesem Pointer als Parameter aufgerufen.
Zur Verdeutlichung wird der String nochmals ausgegeben (wieder "Hallo").
Jetzt wird der Pointer p2, der ja auf das char-Array str zeigt, in der Funktion um eins inkrementiert, in diesem Fall heißt das, dass er auf das nächste Zeichen zeigt.
Wenn der String jetzt ausgegeben wird, erscheint nur noch "allo", da p2 ja jetzt auf das 'a' zeigt.
Danach wird die Funktion foo verlassen, und im Hauptprogramm nochmals der String mittels dem Pointer p ausgegeben, und siehe da, es erscheint wieder "Hallo".Das bedeutet also, dass, obwohl der Pointer p2 innerhalb der Funktion verändert wird, der Pointer p in main unbeeinflusst bleibt.
Tja, und der Grund dafür ist eben, dass der Pointer p nicht direkt (by Reference) der Funktion foo übergeben wird, sondern nur eine Kopie (by Value) von p.
Diese Kopie zeigt aber natürlich auch auf das char-Array str.Du kannst also das Objekt, auf das der Pointer zeigt, über die Funktion ändern, aber nicht den übergebenen Pointer selbst (außer du benutzt eben eine Referenz oder einen Pointer auf diesen Pointer, wie im ersten Post).
Ich hoffe, das wurde dir jetzt klar.
-
wie baut man die void makeNewData(int *& feld) funktion schöner?
und wenn ich in der funktion mache:
strcpy(p2, "hi du");dann wirkt sich ja das auch auf *p in der main aus!
-
sinn schrieb:
und wenn ich in der funktion mache:
strcpy(p2, "hi du");dann wirkt sich ja das auch auf *p in der main aus!
Ja, das ist klar. Da mit *****p der Pointer dereferenziert, d.h. das Objekt, auf das der Zeiger zeigt, angesprochen wird, und dieses wird ja verändert.
Aber der Pointer an sich, der ja auch ein eigenes Objekt ist, wird nicht verändert.Wenn du es immer noch nicht verstanden hast, lies dir mal den Artikel über Pointer hier im Magazin-Teil durch und schau dir dann nochmal den ganzen Thread hier an.
-
#include <stdio.h>
int einlesenint(void)
{
int zahl=0,exp=0;printf("Geben sie eine zahl ein:");
scanf("%d",&zahl);
printf("Geben sie den exponenten ein:");
scanf("%d",&exp);return exp;
}
int verarbeitung(int exp,int zahl)
{
int erg=0;erg=erg*exp;
return erg;
}int ausgabe(int erg)
{printf("das ergebnis lautet:");
scanf("%d",&erg);return erg;
}welchen fehler habe ich gemacht?
-
gast1990 schrieb:
welchen fehler habe ich gemacht?
Es müsste heißen welche Fehler habe ich gemacht.
1. Du hast im falschen Bereich gepostet.
2. Du hast im falschen Thema gepostet.
3. Du hast keine main.
4. Das scanf in ausgabe macht nicht wirklich Sinn.
5. zahl aus einlesenint geht verloren.
6. in verarbeitung multiplizierst du mit 0,nicht mit zahl.
7. macht verarbeitung generell nicht was die Variablenbezeichner vermuten lassen.Auf deine Frage welchen Fehler du gemacht hast,kann man festhalten: alle!
MfG Spacelord