int
タイプの識別子とあらゆる種類の値を保持する単純な構造を作成したいと考えています。使うべきか
struct {
int key;
void *value;
}
また
struct {
int key;
void **value;
}
または、他の何か?
int
タイプの識別子とあらゆる種類の値を保持する単純な構造を作成したいと考えています。使うべきか
struct {
int key;
void *value;
}
また
struct {
int key;
void **value;
}
または、他の何か?
void*
aは何でも指すことができるので、最初のものを使用します。あなたの場合、二重間接化の必要はないようです。
また、別の方法があることにも注意してください。固定ではなく、構造内に可変サイズのペイロードを含める方法void*
です。構造体自体が (リンクされたリストなどで) 割り当てられている場合に便利なので、引数を に調整することでそれらを可変サイズにすることができますmalloc
。
その場合、構造内のポインターを完全に回避できます。詳細については、この回答を参照してください。この特定のケースにそれが必要である(または良いアイデアでさえある)ことを示唆しているわけではなく、別の可能性として提供しているだけです。オプション1で十分すぎると思います。または、構造内にポインターが必要ない場合は、構造内にユニオンを提供します。
ユニオンと構造体の組み合わせを使用する必要があると思います:
struct my_struct {
int key;
union {
int a_int;
float a_float;
char a_char;
/* Other types You may need */
} value;
}
ポインターは変数を指すだけで、その値は保持されません。実際の変数を別の場所に保存する必要があります。