[c]char zeiger

mike4004

Erfahrenes Mitglied
Hi

ich habe ein Verständniss-problem unzwar lern ich gerade C wie vieleicht einige wissen und da kappier ich etwas nicht unzwar bin ich jetzt beim Kappitel Zeiger angelangt und kappier net was sich so dinge wie


char *tag[]
oder **(tag + i)
oder *(*(tag + i)+j) bringe was beteute das ** in meinem buch ist das leider net so gut erklärt der Autor hat äher auf masse stat Klasse gestzt.


kann mit einer das Thema etwas genauer erklären vieleicht auch im icq oder msn da es vieleicht etwas länger dauern könnte!

mfg mike4004
 
moin


** = Pointer auf Pointer.
Brauchst du z.B. bei mehrdimensionalen Arrays, besonders wenn du sie dynamisch anlegst.


mfg
umbrasaxum
 
moin


Welches Buch hast du überhaupt?
Und halte dich bitte an die Groß und KLeinschreibung.


mfg
umbrasaxum
 
Ist ja leider oft so, dass die Qualitaet eines Buches nicht in Relation zu Seitenstaerke und Gewicht steht.

Gibt es denn gerade ein konkretes Problem? Vielleicht koennte man das Thema anhand eines kurzen Beispieles zu eben jenem Problem ganz gut rueberbringen.
 
Hallo,

ich hab dir mal ein weng Sourcecode aufgeschrieben mit ausführlichen
Komentaren und ein paar rhetorischen Fragen die du für dich selber beantworten kannst
und wenn dus nicht weißt dann frag nochmal nach, ich hoffe es hilft dir a weng weiter

Code:
int main(){
    int i = 5; //i ist variable im realen Speicher (sehr "nahe" am Speicher)
    int* a = &i; //a ist eine referenz auf den Speicherplatz der Variable i 
                //a zeigt auf den Speicherplatz i (& Operator gibt Adresse einer Variablen zurück)
                //* Operator in der Deklaration signalisiert das es sich um einen Zeigertypen handelt
                //a ist eine Stufe abstrahierter als i (eine Stufe weiter vom Speicher "entfernt")
                // oder auch a enthält die adresse die den speicherplatz i referenziert
    int** b = &a; //b ist noch ein Stück weiter vom Speicher weg (hoehere Abstraktion) da es zuerst 
                 //a referenziert (also quasi es referenziert eine Referenz)
                 // oder auch b enthält die adresse die den speicherplatz referenziert welcher die Adresse von der Zeigervariablen a enthält
    *a = 3;     //* angewandt in einer Zuweisung(keine Deklaration) bedeuetet das ich den Zeigertyp
                //dereferenziere sprich mich auf den Speicher zubewege (die Abstrahierung geht verloren)
                //welchen wert hat i jetzt?
    **b = 10;   //hier muss ich natürlich 2 mal dereferenzieren da ich mich ja um eine Stufe weiter 
                //vom relaen Speicher entfernt wiederfinde wenn ich b anfasse
    *i = 15;    //geht das?
    i = 2;      //welchen wert hat **b und *a jetzt?
    return 0;
}

Gruß

RedWing
 
Zuletzt bearbeitet:
P.S.

Es gibt also zwei bedeutungen des Operators *
1.) Innerhalb einer Deklaration: Bedeutung: Signalisiert das es sich um einen Zeigertypen
handelt (sprich einen Typen der Speicher referenziert)
2.) Innerhalb einer Zuweisung: Bedeutung: Die Variable die hinter dem Operator * steht wird
dereferenziert(kann links und rechts innerhalb einer Zuweisung vorkommen)

Zum & Operator:

Bedeutung: Gibt die Adresse einer Variablen (sei es eine "normale Varibale" oder eine Zeigervariable) zurück... (kann also nur rechts innerhalb einer Zuweisung auftreten)

Gruß

RedWing
 
hi


Ich hab das Buch C für PC's von Peter Prinz und Ulla Kirch-Prinz.


und das beschreibt das ganze etwas häftig am meisten Probleme hab ich mit char Zeigern (char *array-test ) und zeigern auf Funktionen.

Da sit zum beispiel fast am ende von zeigern so ein Beispiel char * ( * ( * funcptr ) ( ) ) [ ]
kann mir das eine in Worten gut und verständlich erklären .

mfg mike4004
 
Zurück