Ich schreibe eine Funktion, die die Zeigerwerte vom Anrufer angezeigt. Weil ich nicht das Original ** arr1 vermasseln will, also habe ich ihm ein ** P zugewiesen, dann drucke ich es aus und zähle es. Aber dann die linke Seite, die arr1 ist, wird Null.Nach dem Zuweisen eines Zeigers zu einem Zeiger, warum der Lvalue Null werden
Code:
void merge(int **arr1, int **arr2, int **arr3)
{
int **p1= arr1;
int **p2= arr2;
int **p3= arr3;
int count;
printf("%d\n", **arr1); //this shows the correct value of first element of arr1
while(**p1)
{
printf("%d\n", **p1);
(*p1)++;
count++;
}
while(**p2)
{
printf("%d\n", **p2);
(*p2)++;
count++;
}
printf("%d\n", **arr1); // this become zero, why??i didn't touch it in my code didn't i?
}
Sie richtig sind, aber Ich habe nicht geändert ** p1 habe ich nicht? –
@qwrqwr: Du hast '* p1' modifiziert, also zeigt es jetzt woanders hin. Also wird '** p1' jetzt ein anderes Objekt sein. Am besten ist es, dies auf Papier zu zeichnen. –
Wenn ich (* p) ++ mache, gehe ich einfach auf den Zeiger zum nächsten Wert von ** p1, nicht wahr? Und die Adresse von ** arr1 ändert sich während dieser Änderung nicht. also wenn ich ** arr1 drucke, ist es immer noch auf dem ersten Element von arr1 –