Zeiger auf Zeiger vs Zeiger
Verfasst: Fr Feb 01, 2013 7:15 pm
Hi,
ich habe mehrmals einen Zeiger auf Zeiger gesehen, jedoch verstehe ich seinen Sinn noch nicht. Was kann ich mit einem doppelten Zeiger machen, was ich mit einem normalen nicht machen kann?
Ich habe ein Beispiel gemacht, wo ich den einfachen Zeiger an Funktionen als Argument übergebe. Ich konnte dort seine Adresse ändern, auf die er zeigt und auch den Inhalt dieser Adresse im Speicher.
Ausgabe:
Danke!
ich habe mehrmals einen Zeiger auf Zeiger gesehen, jedoch verstehe ich seinen Sinn noch nicht. Was kann ich mit einem doppelten Zeiger machen, was ich mit einem normalen nicht machen kann?
Ich habe ein Beispiel gemacht, wo ich den einfachen Zeiger an Funktionen als Argument übergebe. Ich konnte dort seine Adresse ändern, auf die er zeigt und auch den Inhalt dieser Adresse im Speicher.
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
void einfacherP(int *varP)
{
*varP = 200;
}
void einfacherP2(int *varP)
{
int *var2 = (int*)malloc(sizeof(int));
*var2 = 999;
*varP = var2;
}
void doppelterP(int **varP)
{
//?
}
int main()
{
int *var = NULL;
var = (int*)malloc(sizeof(int));
*var = 100;
printf("Adresse, auf die var im Speicher zeigt: %p\n", var);
printf("Inhalt dieser Adresse: %d\n\n", *var);
einfacherP(var); //ändere den Inhalt der Adresse
printf("Adresse, auf die var im Speicher zeigt: %p\n", var);
printf("Inhalt dieser Adresse: %d\n\n", *var);
einfacherP2(&var); //ändere die Adresse, auf die var im Speicher zeigt
printf("Adresse, auf die var im Speicher zeigt: %p\n", var);
printf("Inhalt dieser Adresse: %d\n", *var);
return 0;
}
Ich habe oben eine Funktion void doppelterP(int **varP) deklariert. Sie hat einen doppelten Zeiger als Parameter. Was könnte diese Funktion machen, was eine andere mit einem einfachen Zeiger nicht machen kann? Wann wird ein doppelter Zeiger benutzt?Adresse, auf die var im Speicher zeigt: 00390FE8
Inhalt dieser Adresse: 100
Adresse, auf die var im Speicher zeigt: 00390FE8
Inhalt dieser Adresse: 200
Adresse, auf die var im Speicher zeigt: 00391060
Inhalt dieser Adresse: 999
Danke!