我有一个以下格式的结构
typedef struct small {
int a;
} small;
typedef struct large {
small* s;
int b;
} large;
我想编写一个函数来修改变量a
。但是在函数声明/签名中,我希望使用small
以下方式
void modifyA(small* s, int newVal){
s->a = newVal;
}
我希望保持modifyA
函数的通用性,以便同时提供large
和small
。有没有办法实现这一点,将其large
作为modifyA
函数的输入?
例如,我想要
int main(){
large* l;
small* s;
int newVal = 10;
// assume all member of l and s are initialized properly
modifyA(&l->s, 10);
modifyA(s, 10);
return 0;
}
modifyA()
接受一个指向 的指针small
,并且large
有一个对象成员small
,因此您可以简单地将一个指针传递给该成员,例如:更新:您更改了问题中的代码,使
large::small
成员成为small*
指针而不是对象small
。在这种情况下,只需&
在将该成员传递给时删除运算符即可modifyA()
:C 中的另一种选择是使用泛型的魔力:
宏只是简单地解析为初始参数(
X
在宏中命名)调用正确的函数。因此,我们得到了参数指针所需的输出: