C-函数结构

C-函数结构,c,function,struct,C,Function,Struct,所以我对C编程还是相当陌生的。不过我已经学过Python,所以我对一些代码比较熟悉 例如,当我在python中创建一个函数时,我能够使它通用并可用于不同的类 我想在这里做类似的事情。我有两个看起来几乎一样的结构。我想对两个structs使用相同的函数,但当然我不能将struct名称作为参数发送到函数中。我该怎么办 现在不要担心函数的作用。对于我来说,能够在同一个函数中使用两个structs的原则很重要。如果这是一个完全错误的观点,那么我很抱歉,但这是我遇到这个问题时的第一个想法 typedef

所以我对C编程还是相当陌生的。不过我已经学过Python,所以我对一些代码比较熟悉

例如,当我在python中创建一个函数时,我能够使它通用并可用于不同的类

我想在这里做类似的事情。我有两个看起来几乎一样的结构。我想对两个
struct
s使用相同的函数,但当然我不能将
struct
名称作为参数发送到函数中。我该怎么办

现在不要担心函数的作用。对于我来说,能够在同一个函数中使用两个
struct
s的原则很重要。如果这是一个完全错误的观点,那么我很抱歉,但这是我遇到这个问题时的第一个想法

typedef struct{
   int number;
   struct node *next;
}struct_1;

struct node *head;

typedef struct{
   int number;
   struct node *next;
}struct_2;

void main()
{
   int number1 = 10;
   int number2 = 20;
   function(number1);
   function(number2);
}

void function(int x, struct) // Here is where I want to be able to use 2 different structs for the same function
{
   struct *curr, *head;
   curr=(node1*)malloc(sizeof(node1));
   printf("%d", curr->number);
}

C不像Python那样使用duck类型,因此您不能传递一个看起来像另一个完全不相关的结构,就像它是另一个结构一样。

C不像Python那样使用duck类型,因此您不能传递一个看起来像另一个的结构,完全不相关的结构,就好像它是另一个结构一样。

不幸的是,C不能做你想做的事情

你的选择是:

  • 重构代码以对所有项使用相同的结构类型
  • 将结构中感兴趣的字段直接传递给函数
  • 编写代码将类似结构封送到公共结构
  • 在两个不同的结构中以相同的方式排列共享元素,并强制转换指针

  • 不幸的是,C不能做你想做的事

    你的选择是:

  • 重构代码以对所有项使用相同的结构类型
  • 将结构中感兴趣的字段直接传递给函数
  • 编写代码将类似结构封送到公共结构
  • 在两个不同的结构中以相同的方式排列共享元素,并强制转换指针

  • 回答:不,你不能直接做。欢迎使用静态类型


    有一种方法可以通过使用我们心爱的void*和一些铸件来实现类似的效果,但是,相信我,这不是你想要做的。如果你真的想做,直接要求。你被警告了。

    回答:不,你不能直接做。欢迎使用静态类型


    有一种方法可以通过使用我们心爱的void*和一些铸件来实现类似的效果,但是,相信我,这不是你想要做的。如果你真的想做,直接要求。您已收到警告。

    一个结构可能有两个实例。
    函数可以接受任一实例,并根据需要对其进行处理

    typedef struct{
        int number;
        struct node *next;
    }mystruct;
    void function(int x, mystruct *eachstruct);//prototype
    int main()
    {
        int number1 = 10;
        int number2 = 20;
        //declare two instances of mystruct
        mystruct list_1 = { 0, NULL};
        mystruct list_2 = { 0, NULL};
        // call the function with one or the other instance of mystruct
        function(number1, &list_1);
        function(number2, &list_2);
    }
    
    void function(int x, mystruct *eachstruct)
    {
        //do stuff in function
        eachstruct->number = x;
        if ( eachstruct->next == NULL)
        {
            //do more stuff
        }
    }
    

    一个结构可以有两个实例。
    函数可以接受任一实例,并根据需要对其进行处理

    typedef struct{
        int number;
        struct node *next;
    }mystruct;
    void function(int x, mystruct *eachstruct);//prototype
    int main()
    {
        int number1 = 10;
        int number2 = 20;
        //declare two instances of mystruct
        mystruct list_1 = { 0, NULL};
        mystruct list_2 = { 0, NULL};
        // call the function with one or the other instance of mystruct
        function(number1, &list_1);
        function(number2, &list_2);
    }
    
    void function(int x, mystruct *eachstruct)
    {
        //do stuff in function
        eachstruct->number = x;
        if ( eachstruct->next == NULL)
        {
            //do more stuff
        }
    }
    

    能够使用
    您能澄清一下吗?“
    struct_1
    struct_2
    在您的示例中具有相同的成员。你想要实现什么?你想为各种类型的有效载荷建立一个链表吗?这是一个完全错误的观点。不要尝试将Python动态类型应用于C。如果C有两个结构(即使具有相同的字段),则它们是不同的,仅此而已。有一些技巧可以避免这种情况,但由于您是C新手,所以不要从技巧开始。@diaco为什么一开始就要为同一事物使用两个结构?您想要一个结构的两个副本。没有两种不同的数据类型。
    能够使用
    您能澄清一下吗?“
    struct_1
    struct_2
    在您的示例中具有相同的成员。你想要实现什么?你想为各种类型的有效载荷建立一个链表吗?这是一个完全错误的观点。不要尝试将Python动态类型应用于C。如果C有两个结构(即使具有相同的字段),则它们是不同的,仅此而已。有一些技巧可以避免这种情况,但由于您是C新手,所以不要从技巧开始。@diaco为什么一开始就要为同一事物使用两个结构?您想要一个结构的两个副本。不是两种不同的数据类型。