(horrible names) struct HPMHookPoint { void *func; unsigned int pID; }; struct { struct { struct HPMHookPoint *HP_battle_check_target_pre; struct HPMHookPoint *HP_battle_check_target_post; } list; } HPMHooks; whatever_function { struct HPMHookPoint *a = HPMHooks.list.HP_battle_check_target_pre; if( type == HOOK_TYPE_POST ) a = (struct HPMHookPoint *)((char *)a + sizeof(struct HPMHookPoint *)); }