[英]passing different structs to a function in c
我有不同的结构,需要以相同的方式填写。 唯一的区别是它们是根据不同的数据填充的。
我想知道是否可以将不同的结构传递给某个函数。 我想到的是这样的:
struct stu1 {
char *a;
int b;
};
struct stu2 {
char *a;
int b;
};
static struct not_sure **some_func(struct not_sure **not_sure_here, original_content_list)
{
// do something and return passed struct
the_struct = (struct not_sure_here **)malloc(sizeof(struct not_sure_here *)20);
for(i=0; i<size_of_original_content_list; i++){
//fill out passed structure
}
return the_struct;
}
int main(int argc, char *argv[])
{
struct stu1 **s1;
struct stu2 **s2;
return_struct1 = some_func(stu1);
return_struct2 = some_func(stu2);
// do something separate with each return struct...
}
任何意见将不胜感激。
您可以使用嵌套结构在C语言中进行某种“继承”。
像这样:
struct Derived {
struct Base b;
int another_i;
char another_c;
};
struct Derived_2 {
struct Base b;
};
然后可以安全地执行以下操作:
struct Derived d;
struct Derived_2 d2;
set_base( (struct Base*)&d );
set_base( (struct Base*)&d2 );
这是安全的,因为它是第一个成员。 您当然可以在其他时间以更安全的方式调用它们,例如
set_base( &d.b );
但这在指向未知对象类型的指针的循环中可能并不方便。
在C语言中,指向结构的指针只是一个内存指针。 因此,是的,可以将指向任何结构的指针传递给函数。 但是,该功能需要知道结构的布局才能对其进行有用的工作。
在您的示例中,布局是相同的,因此它是“安全的” ...但是,如果其中一种结构突然更改格式并且未更新功能以解决该更改,则可能会有风险。
我认为您的意思是这些结构包含相同的数据类型,并且只有字段名称不同? 如果是这样,您有两种选择:
1)创建一个包含这两个结构的联合类型,并将其传递给some_func。 然后,它可以填写任何一个工会成员-哪一个都不重要,因为两者的内存布局完全相同,因此将具有相同的效果。
2)只需让some_func将其中一个结构作为参数,并在要传递另一个结构时将其强制转换为第一个。 同样,由于内存布局相同,因此可以正常工作。
static struct stu1 **some_func(struct stu1 *not_sure_here, original_content_list)
{
...
}
int main(int argc, char *argv[])
{
return_struct1 = some_func(stu1);
return_struct2 = (struct stu2)some_func((struct stu1)stu2);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.