【发布时间】:2012-09-12 17:46:01
【问题描述】:
在我们的代码中,我们有一个混合类型的大型结构,并希望为这些类型存储一个重复的 (const) 结构的默认值。
当用户想要默认设置时,最好能够通过获取结构中项目的地址偏移量来做到这一点,然后在“默认”结构中分配具有相同偏移量的值,有点像这样:
void *setting = &settings->thing; // Points to a setting
int offset = setting - &settings;
void *default = &defaults_struct + offset; // Points to the default value
*setting = *default; // Set setting to default value
如果 settings->thing 指向 int8,则从默认值复制 int8 值,但如果 settings->other_thing 是 int32,则复制完整的 32 位。
问题是,这是否适用于如上所述的 void 指针?如果没有,有没有办法做到这一点?我是否错过了实现这一目标的更好方法?
编辑澄清:我们希望将结构中的单个值设置为“默认”结构中的相应值。
【问题讨论】:
-
为什么不只是
settings->thing = defaults_struct->thing? -
你不能对 void 指针进行指针运算,也不能像那样通过它复制任何东西。您需要使用
char*并确定要复制的适当长度(并自己进行复制)。 -
您应该使用
offsetof宏来计算偏移量。 -
@interjay,你的意思可能是
settings->thing = defaults_struct.thing? -
@interjay - 从更大的角度来看,正在修改的设置将作为指针传递给我们:make_default(void *setting)
标签: c pointers embedded void void-pointers