私は一般的なリストadtを書いています、そしてこれは私がこれまでヘッダーに持っているものです。私が知っていることから、これは通常それが行われる方法です。
typedef struct _node {
void *data;
struct _node *next;
} Node;
typedef struct {
Node *dummy;
int (*comparePtr) (void *d1, void *d2);
void (*destroyPtr) (void *data);
} List;
List *ListCreate (int (*comparePtr) (void *d1, void *d2), void (*destroyPtr) (void *data));
void ListDestroy (List *node);
void ListAddToTail (List *list, void *data);
int ListContains (List *list, void *data);
void *ListGetFromIndex (List *list, int index);
実装側では問題なく動作します。私が気付いたのは、このadtを使用して整数を格納するには、この方法で呼び出しを行う必要があるということです。
int a = 5;
ListAddToTail (list, &a);
一方、完璧な世界では、これを行うことができます
ListAddToTail (list, 55);
だから問題は、これを変更して、ポインターまたは非ポインター、主に整数や文字などのプリミティブ型である非ポインターの任意のタイプのデータを渡すことができるようにすることは可能ですか?