width
typedef(或结构)中没有可以附加指针的字段之类的东西。该场仅在物理上存在于该类型的具体对象中。所以,你不能有一个指向结构的指针width
。您只能拥有指向 的指针box1.width
,box2.width
依此类推。
不可能以某种方式编写一个会改变width
所有现有对象的函数。更准确地说,不可能编写一个函数以某种方式神奇地枚举该类型的所有现有对象并更改width
其中的字段。您有责任告诉您的函数您想要更改哪些对象。
无论如何,你想做什么?
如果您正在尝试编写一个“setter”函数,该函数将使用要设置的特定字段进行运行时参数化,如果可以通过偏移量在 C 中完成。例如
void set_value(box *box, size_t offset, int value) {
*(int *) ((char *) box + offset) = value;
}
box box1;
box box2;
box box3;
void set_values(size_t offset, int value)
{
set_value(&box1, offset, value);
set_value(&box2, offset, value);
set_value(&box3, offset, value);
}
现在打电话
set_values(offset_of(box, width), 42);
box1
将在,box2
和box3
to中设置宽度42
,同时调用
set_values(offset_of(box, height), -5);
将这些对象的高度设置为-5
.
但是,同样,您有责任确保函数知道它必须更改哪些对象。在上面的示例中,我只是将它们声明为文件范围变量。在现实生活中,这通常是不可能的。