C - 函数结构
C - Functions Structs
所以我对 C 编程还是很陌生。不过我学过Python,所以对部分代码比较熟悉
例如,当我在 python 中创建一个函数时,我能够使其通用并可用于不同的 类。
我想在这里做类似的事情。我有两个看起来几乎相同的结构。我想对两个 struct
使用相同的函数,但当然我不能将 struct
名称作为参数发送到函数中。我该怎么办?
现在不用担心函数的作用。它能够在对我来说很重要的同一函数中使用两个 struct
的原则。如果这是一个完全错误的观点,那么我很抱歉,但这是我遇到这个问题时的第一个想法。
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 那样使用鸭子类型,因此您不能传递一个 看起来像 其他完全不相关的结构的结构,就好像它是另一个结构一样。
很遗憾,C 无法满足您的要求。
您的选择是:
- 重构代码以对所有项目使用相同的结构类型。
- 将结构中感兴趣的字段直接传递给函数
- 编写代码将相似的结构编组为通用结构。
- 快速而随意地使用类型系统,在两个不同的结构中以相同的方式排列共享元素,并转换您的指针。
If you just want a linked list check out how code re-use is achieved in the linux kernel
答:不可以,不能直接做。欢迎使用静态类型。
有一种方法可以通过使用我们心爱的 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
}
}
所以我对 C 编程还是很陌生。不过我学过Python,所以对部分代码比较熟悉
例如,当我在 python 中创建一个函数时,我能够使其通用并可用于不同的 类。
我想在这里做类似的事情。我有两个看起来几乎相同的结构。我想对两个 struct
使用相同的函数,但当然我不能将 struct
名称作为参数发送到函数中。我该怎么办?
现在不用担心函数的作用。它能够在对我来说很重要的同一函数中使用两个 struct
的原则。如果这是一个完全错误的观点,那么我很抱歉,但这是我遇到这个问题时的第一个想法。
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 那样使用鸭子类型,因此您不能传递一个 看起来像 其他完全不相关的结构的结构,就好像它是另一个结构一样。
很遗憾,C 无法满足您的要求。
您的选择是:
- 重构代码以对所有项目使用相同的结构类型。
- 将结构中感兴趣的字段直接传递给函数
- 编写代码将相似的结构编组为通用结构。
- 快速而随意地使用类型系统,在两个不同的结构中以相同的方式排列共享元素,并转换您的指针。
If you just want a linked list check out how code re-use is achieved in the linux kernel
答:不可以,不能直接做。欢迎使用静态类型。
有一种方法可以通过使用我们心爱的 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
}
}