列挙型で指定された任意のタイプのデータを含むことができる完全に汎用的なリンクリストを作成する必要があります...
リストのノードの構造は次のとおりです。
__________________
|_____|_____|_____|
最初のフィールドは、格納されている情報のタイプを含むsizeof(nodeType)バイトです。次のフィールドには、情報変数のアドレスを含むアドレスがあります。次のフィールドには、次のノードのアドレスがあります。これは、単純なノードまたはさらに別のリンクリストにすることができます。
基本的に、私は次のようなnodeType列挙型を持っています:
typedef enum{
STRING, INT, NIL, LIST
} nodType;
次のようにノードポインタにメモリを割り当てました。
nodeType* node = malloc(sizeof(nodeType) + 2*sizeof(char*));
最初のsizeof(nodeType)バイトには、格納されている情報のタイプが含まれています。次の式で値STRINGを割り当てました。
*node = STRING;
ここで、次のsizeof(char *)バイトにchar*ポインターのアドレスを格納する必要があります。(すべてのポインターはマシン上で同じサイズですか?(はい、私に一致します))。したがって、次のように値を割り当てます。
char* str = strdup("Hello");
(char**)(char*(node) + sizeof(nodeType)) = &str;
しかし、代入演算子のLHSは左辺値ではないため、GCCはエラーにフラグを立てます。リストの作成に進むには、そのアドレスに値を割り当てる必要があります。構造体を使用する以外に、cでそれを行うエレガントな方法はありますか?