c - 将两个不同的结构传递给同一个函数

标签 c function struct parameters

我有 2 个不同大小的结构,我希望有一个函数可以将它们传递给其中。但是,我不知道如何定义函数的参数来接受 2 个不同的结构。

我的结构在下面

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 中不相关的结构,唯一的选择是将指针传递给未类型化的结构(即作为 void*),并“在一边”传递类型,如下所示:

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);

不过,这种方法很容易出错,因为编译器无法为您进行类型检查。

关于c - 将两个不同的结构传递给同一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14324182/

相关文章:

c - 如何通过执行 exec 终止正在运行另一个程序的子进程

c++ - 如何从不同的函数而不是 main() 开始执行 c/c++ 中的程序

java - 不返回值,来自具有非 void 返回类型的函数

C编程通过函数传递值

Javascript:递归函数为现有值返回未定义

c++ - 结构数组,其中包含数组。不会编译

c - init-on-first-use 函数的 gcc 属性

c - 预递增的字符指针在递增后都指向相同的地址?

c++ - 我可以在没有结构实例的情况下使用 `hana::keys` 吗?

c - 如何在 C 中声明指向结构数组的指针