gpt4 book ai didi

c - 二结构一功能

转载 作者:行者123 更新时间:2023-12-04 03:45:12 25 4
gpt4 key购买 nike

我想在 C 代码中做一些类似的事情来调用一个函数,它可以对两个相似但不相同的结构进行操作。现在我有两个函数可以执行相同但类型不同的数据。我无法将结构更改为相同的数据类型。该结构必须具有不同的数据类型。我试过 void pointer 但没有用。动态转换指针,但我认为在 C 代码中不可能。我不能使用动态分配内存 malloc 等。可以实现吗?

    typedef struct st1_tag
{
uint32_t a;
uint16_t b;
uint16_t tab[10];
}st1_t;

typedef struct st2_tag
{
uint8_t a;
uint16_t b;
uint32_t tab[10];
}st2_t;

...

st1_t x1;
st2_t x2;

...

void foo_1(void)
{
if(x1.b > 2)
{
//to do someting on data struct x1
}
}

void foo_2(void)
{
if(x2.b > 2)
{
//to do something similar like in foo1 but data type field of struct are not the same.
}
}

void foo3(void)
{
foo1();
foo2();
}

最佳答案

"I tried by void pointer but doesn't work.".

和:

"I can't use allocate memory dynamically malloc"

我不确定以何种方式使用 void * 不起作用,但下面定义了一个函数,可用于通过 void * 传递任何一种类型的结构>,不使用动态分配:

  typedef struct st1_tag
{
uint32_t a;
uint16_t b;
uint16_t tab[10];
}st1_t;
st1_t s1, *pS1;

typedef struct st2_tag
{
uint8_t a;
uint16_t b;
uint32_t tab[10];
}st2_t;
st2_t s2, *pS2;

typedef enum {
TYPE_1,
TYPE_2,
TYPE_MAX
}type_e;


void operate_on_two_different_struct(void *s, type_e type);

int main()
{
st1_t st1 = {18, 25, {1,2,3,4,5,6,7,8,9,10}};
st2_t st2 = {10, 25000, {10,20,30,40,50,60,70,80,90,100}};

operate_on_two_different_struct(&st1, TYPE_1);
operate_on_two_different_struct(&st2, TYPE_2);

return 0;
}

void operate_on_two_different_struct(void *s, type_e type)
{
switch(type) {//demonstrates conveyance of data, nothing else.
case TYPE_1:
pS1= (st1_t *)s;
break;
case TYPE_2:
pS2 = (st2_t *)s;
break;
}
}

如果您需要比这更具体的信息或其他一些信息,请在下面发表评论。

关于c - 二结构一功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65294070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com