Hi,
ich befasse mich nun seit einiger Zeit mit C. Neulich habe ich mir LinkedLists angesehen und fand diese auch sehr praktisch. Nun habe ich mich heute rangesetzt und wollte einen Header für LinkedLists machen um für mich das verwalten dieser einfacher zu machen.
Der Header:
Spoiler anzeigen
Und meine Main:
Spoiler anzeigen
Jedoch sagt er mir jedes mal bei laddend, das current = nullptr ist. Jedoch verstehe ich das ganze nicht da ich doch einen zuvor mit malloc in linit einen Pointer als Rückgabewert erhalte?
Oder übergibt es es als call-by-value? Das kann aber auch nicht sein da es eig. ein Pointer sein müsste
Ich hoffe mir kann jemand helfen und auch die Logik dahinter erklären!
Danke im vorraus!
Grüße,
DragonSlayerMarc
ich befasse mich nun seit einiger Zeit mit C. Neulich habe ich mir LinkedLists angesehen und fand diese auch sehr praktisch. Nun habe ich mich heute rangesetzt und wollte einen Header für LinkedLists machen um für mich das verwalten dieser einfacher zu machen.
Der Header:
C-Quellcode
- #ifndef _LINKEDLIST_H
- #define _LINKEDLIST_H
- #include <stdlib.h>
- typedef struct Node *List;
- struct Node
- {
- List Previous;
- char* Key;
- char* Data;
- List Next;
- };
- typedef struct Node Node;
- void linit(List l, char* key, char* data)
- {
- l = (List) malloc(sizeof(Node));
- l->Previous = NULL;
- l->Key = key;
- l->Data = data;
- l->Next = NULL;
- }
- void laddstart(List l, char* key, char* data)
- {
- List Temp = l;
- l = (List) malloc(sizeof(Node));
- l->Previous = NULL;
- l->Key = key;
- l->Data = data;
- l->Next = Temp;
- }
- void laddend(List l, char* key, char* data)
- {
- List current = l;
- while (current->Next != NULL)
- {
- current = current->Next;
- }
- current->Next = (List) malloc(sizeof(Node));
- current->Next->Previous = current;
- current->Next->Key = key;
- current->Next->Data = data;
- current->Next->Previous = NULL;
- }
- void lremove(List l, char* key)
- {
- List current = l;
- while (current->Key != key)
- {
- current = current->Next;
- }
- List Previous = current->Previous;
- List Next = current->Next;
- free(current);
- Previous->Next = Next;
- Next->Previous = Previous;
- }
- void lforeach(List l, void (*func) (char*, char*))
- {
- List current = l;
- while (current->Next != NULL)
- {
- func(current->Key, current->Data);
- current = current->Next;
- }
- }
- #endif
Und meine Main:
C-Quellcode
- #include <stdio.h>
- #include <stdlib.h>
- #include "LinkedList.h"
- void stringsForEach(char*, char*);
- int main()
- {
- List strings = NULL;
- linit(strings, "2", "heiße");
- laddend(strings, "3", "nicht");
- laddend(strings, "4", "Rüdiger");
- laddstart(strings, "1", "Ich");
- lforeach(strings, stringsForEach);
- system("PAUSE >NUL");
- return EXIT_SUCCESS;
- }
- void stringsForEach(char* key, char* data)
- {
- printf("%s: %s\n", key, data);
- }
Jedoch sagt er mir jedes mal bei laddend, das current = nullptr ist. Jedoch verstehe ich das ganze nicht da ich doch einen zuvor mit malloc in linit einen Pointer als Rückgabewert erhalte?
Oder übergibt es es als call-by-value? Das kann aber auch nicht sein da es eig. ein Pointer sein müsste
Ich hoffe mir kann jemand helfen und auch die Logik dahinter erklären!
Danke im vorraus!
Grüße,
DragonSlayerMarc
There are only 10 types of people in the world: Those who understand binary and those who don't.