Verständnisproblem mit C und Zeigern

Wie man Zeiger verwendet, weiß ich ja mittlerweile so einigermaßen, aber mir ist noch was unklar:

  1. Was ist, wenn 2 Sterne vor der Variable stehen?
    char **variablenname

  2. Was heißt es, wenn der Stern nach dem Typ steht?
    text[i]=(char*) malloc(laenge+1);

Danke schon mal im Voraus

Ajo

Moin!

Wie man Zeiger verwendet, weiß ich ja mittlerweile so
einigermaßen, aber mir ist noch was unklar:

  1. Was ist, wenn 2 Sterne vor der Variable stehen?
    char **variablenname

Das ist ein Doppelzeiger oder besser: Ein Zeiger auf einen Zeiger. Wie ein Zeiger eine Adresse von einer Variable enthält, enthält ein Doppelzeiger eben eine Adresse von einem anderem Zeiger. Alles klar? =)

  1. Was heißt es, wenn der Stern nach dem Typ steht?
    text[i]=(char*) malloc(laenge+1);

Das bedeutet nix anderes als wenn er auch vor dem Variablennamen steht. Nur in deinem Fall ist das ein Cast in einen Pointer auf Char.

Danke schon mal im Voraus

Ajo

Moin!

Wie man Zeiger verwendet, weiß ich ja mittlerweile so
einigermaßen, aber mir ist noch was unklar:

  1. Was ist, wenn 2 Sterne vor der Variable stehen?
    char **variablenname

Das ist ein Doppelzeiger oder besser: Ein Zeiger auf einen
Zeiger. Wie ein Zeiger eine Adresse von einer Variable
enthält, enthält ein Doppelzeiger eben eine Adresse von einem
anderem Zeiger. Alles klar? =)

Verständlicher wird es vielleicht, wenn man bemerkt, dass

char \*\* bla;

identisch ist mit

char \* bla[];
  1. Was heißt es, wenn der Stern nach dem Typ steht?
    text[i]=(char*) malloc(laenge+1);

Das bedeutet nix anderes als wenn er auch vor dem
Variablennamen steht. Nur in deinem Fall ist das ein Cast in
einen Pointer auf Char.

Interessanter weise ist das auch eine Besonderheit der „malloc“ Funktion. Sie liefert prinzipiell zwar einen Zeiger mit der Korrekten Ausrichtung auf das reservierte Element zurück, aber dieser Zeiger ist zunächst vom Typ „void“. Er muss in jedem Falle zwingend per cast-operator in den entsprechenden Typen umgewandelt werden. So wird z.B. auch folgendes häufig verwendet:

typedef struct
{
 char \* irgend;
 int \* eine;
 double \* benötigte;
 char \* struktur;
} bla;

bla \* blub;

blub = (bla \*) malloc(1000\*sizeof(bla));

Gruß

Fritze