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?