我有两个不同大小的结构,我想有一个函数,我可以在其中传递它们。但是,我不知道如何定义函数的参数来接受两个不同的结构。
我的结构如下
struct {
int a; // 2 byte
int b; // 2 byte
int c; // 2 byte
int d; // 2 byte
} person1; // 8 bytes
struct {
int a; // 2 byte
DeviceAddress b; // 8 bytes
int c // 2 bytes
float d; // 4 bytes
} person2; // 16 bytes
function print_struct(struct& ?????)
{
actions here....
}
print_struct(person1);
print_struct(person2);
最佳答案
不幸的是,对于c中不相关的结构,唯一的选择是将指针传递给未类型化的结构(即asvoid*
),并传递类型“on the side”,如下所示:
struct person1_t {
int a; // 2 byte
int b; // 2 byte
int c; // 2 byte
int d; // 2 byte
} person1;
struct person2_t {
int a; // 2 byte
DeviceAddress b; // 8 bytes
int c // 2 bytes
float d; // 4 bytes
} person2;
void print_struct(void* ptr, int structKind) {
switch (structKind) {
case 1:
struct person1 *p1 = (struct person1_t*)ptr;
// Print p1->a, p1->b, and so on
break;
case 2:
struct person2 *p2 = (struct person2_t*)ptr;
// Print p2->a, p2->b, and so on
break;
}
}
print_struct(&person1, 1);
print_struct(&person2, 2);
不过,这种方法非常容易出错,因为编译器无法为您执行类型检查。