Inkompatible Typen



  • So sehen Asgards hinweise übersetzt in Code aus:

    stackPart *initStack(int eingabe) 
    { 
        stackPart* a = new stackPart;
    
        a->value = eingabe; 
        a->ptrToNextPart = NULL; 
    
        return a;  
    }
    

    Den reservierten Speicher musst du irgendwo wieder mit delete löschen, wenn
    du die Liste nicht mehr brauchst. Soll doch ne verkettete Liste werden?



  • Taurin schrieb:

    stackPart* a = new stackPart;
    

    Aber nicht in C.

    stattdessen:

    stackPart * a = malloc(sizeof(stackPart));
    


  • Ok, Vorschläge beherzigt, ich habs mit Hilfe geschafft das Teil zu beenden, allerdings habe ich fragen dazu:

    #include <stdio.h> 
    #include <stdlib.h> 
    
    typedef struct stackPart 
    { 
        int value; 
        int *pToNextPart; 
    }stackPart; 
    
    stackPart *pPosition; /* Hierzu die Frage: In der Main gebe ich die Adresse aus, auf die dieser Pointer zeigt. Wieso ist die "0" und kein Wert der bereits im Speicher war?
    2.) Verständnisfrage: "stackPart *pPosition;" besagt doch auf gut Deutsch: erstelle einen pointer welcher auf irgendeine Struktur vom typ stackPart zeigen kann oder sehe ich das falsch?*/
    
    void push(int eingabe) 
    { 
        stackPart *pNeuesElement = (stackPart *)malloc(sizeof(stackPart));
    	pNeuesElement->value = eingabe;  
    	pNeuesElement->pToNextPart = pPosition; 
    	pPosition = pNeuesElement;
    	printf("Die %i liegt in der Adresse %i!\n", pNeuesElement->value, pPosition);	
    } 
    
    void pop()
    {
        // Unterlaufschutz fehlt
        stackPart *pZuLoeschendesElement=pPosition;
        pPosition=pPosition->pToNextPart;
        free(pZuLoeschendesElement);
    }
    
    void show()
    {
     // Ausgabe erst wenn ein Wert eingegeben wurde fehlt
     printf("Der Wert %i in der Adresse %i liegt oben im Stack!\n", *pPosition, pPosition);
    }
    
    int main()
    {
      printf("%i ist die momentane Adresse vom pPosition!\n", pPosition);
      push(30);
      push(17);
      push(40);
      pop();
      push(100);
      show();
      return 0;
    }
    

    Hoffentlich hilft mir so spät noch jemand
    Gibts sonst noch etwas zu meckern? 😕



  • Gast001 schrieb:

    stackPart *pPosition; /* Hierzu die Frage: In der Main gebe ich die Adresse aus, auf die dieser Pointer zeigt. Wieso ist die "0" und kein Wert der bereits im Speicher war?
    2.) Verständnisfrage: "stackPart *pPosition;" besagt doch auf gut Deutsch: erstelle einen pointer welcher auf irgendeine Struktur vom typ stackPart zeigen kann oder sehe ich das falsch?*/

    1: Du gibst die Adresse mehrfach aus. Ist die immer 0? (Kann eigentlich nicht sein). BTW der Formatbezeichner für Pointer ist %p und nicht %i.
    2: Genau.



  • Ich gebe die Adresse 1x aus, und zwar ganz am Anfang wo ich noch nichts dort reingeschrieben habe, wo der pointer pPosition hinzeigt

    int main() 
    { 
      printf("%i ist die momentane Adresse vom pPosition!\n", pPosition); 
    [...]
    

    Ich habe pPosition initialisiert und wollte mal schauen worauf der pointer zeigt und er zeigt immer auf "0".
    Ist das nun Standardmäßig so gemacht worden?



  • Man merkt dasist noch neu für mich:

    ich meinte die adresse des pointers ist Null, schreibe ich nun noch einen pointer dazu, z.b. stackPart *neuerpointer; und gebe auch seine adresse aus ist sie auch null. ich verstehe nicht wie beide dieselbe adresse haben können?



  • Du gibst die Adresse nicht nur in main aus, sondern auch in push und in show. Dass sie am Anfang 0 ist liegt daran, dass globale und statische Variablen automatisch mit 0 initialisiert werden, wenn nichts anderes angegeben ist.

    auf das zweite Posting: Nicht die Adresse des Pointers ist 0, sondern beide Pointer zeigen auf 0. Und das ist überhaupt kein Problem, hoffe ich 😉



  • Ok genau das wollte ich wissen vielen Dank.
    Ist wie gesagt alles noch sehr neu für mich und ich muss mich da noch reinfuchsen.

    besten dank! 🙂



  • halt, moment gar nicht 😃

    also:

    stackPart *pPointer; wurde erstellt.

    int main()
    {
      printf("%i ist die momentane Adresse vom pPosition!\n", pPosition);
    [...]
    

    Rufe ich auf, ohne das ich irgendetwas gemacht habe und pPosition gibt doch die Adresse aus, *pPosition würde den Inhalt ausgeben denn:

    void push(int eingabe) //Nehmen wir 30
    { 
     [...]
    printf("Die %i liegt in der Adresse %i!\n", pNeuesElement->value,  pPosition);	}
    

    Gibt aus

    "Die 30 liegt in der Adresse 3283298!"
    Also gibt pPosition doch die Adresse aus und nicht den Inhalt worauf pPosition zeigt oder nicht?!



  • Am Anfang zeigt pPosition auf 0. Dann weist du ihm einen dynamisch allozierten Speicherblock zu, dh er zeigt dann auf eine konkrete Adresse. Wo ist das Problem?


Anmelden zum Antworten