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