C 如何为单个变量定义不同的结构

C 如何为单个变量定义不同的结构,c,C,我根据以下条件声明一个变量: if(abc == 2) { price* x; x = (price *)malloc(2 * sizeof(price*)); } else if(abc == 3) { store* x; x = (store *)malloc(2 * sizeof(store*)); } // x is getting used in other function xyz(&x); 编译时,它抛出错误:错误:“x”未在此范围内声明。我知道,由于x

我根据以下条件声明一个变量:

if(abc == 2)
{
price* x;
    x = (price *)malloc(2 * sizeof(price*));
}
else if(abc == 3)
{
store* x;
    x = (store *)malloc(2 * sizeof(store*));
}

// x is getting used in other function
xyz(&x);
编译时,它抛出错误:错误:“x”未在此范围内声明。我知道,由于x没有在函数范围中定义,所以它是抛出错误的


我试图声明void*x,但也没用。我们有什么办法可以做到这一点吗?

您必须在
if
之前声明
x
。问题在于变量的范围而不是类型

您必须在
if
之前声明
x
。问题在于变量的范围而不是类型

看来你想要

void* x = 0;

if(abc == 2)
{
    x = (price *)malloc(2 * sizeof(price*));
}
else if(abc == 3)
{
    x = (store *)malloc(2 * sizeof(store*));
}
顺便说一句,在malloc系列中,尺寸或类型似乎可疑

我想你想要

x = (price **)malloc(2 * sizeof(price*));

看来你想要

void* x = 0;

if(abc == 2)
{
    x = (price *)malloc(2 * sizeof(price*));
}
else if(abc == 3)
{
    x = (store *)malloc(2 * sizeof(store*));
}
顺便说一句,在malloc系列中,尺寸或类型似乎可疑

我想你想要

x = (price **)malloc(2 * sizeof(price*));


为什么
void*
不起作用?如果你做得正确,它会起作用的。当使用
void*
时,您会遇到什么问题?谢谢,但如果我像这样使用x,则会抛出错误:xyz(&x[0]);错误:算术中使用了“void”类型的指针,错误:“void”不是指向对象类型的指针,因为错误说明
void*
是不完整的类型。传递
xyz(x)
,而不是索引它。我想知道
xyz()
如何处理
x
而不知道
x
的类型。上面的代码是一段示例代码。我没有发布实际代码。在xyz中,我们需要传递参数,如&x[0]。到目前为止,每个结构都有两个不同的函数,可以正常工作。我正在尝试通过添加此if条件来重构代码。
xyz
需要将其转换回
price*
store*
,然后才能对其进行索引。它需要知道它指向哪一个。为什么
void*
不起作用?如果你做得正确,它会起作用的。当使用
void*
时,您会遇到什么问题?谢谢,但如果我像这样使用x,则会抛出错误:xyz(&x[0]);错误:算术中使用了“void”类型的指针,错误:“void”不是指向对象类型的指针,因为错误说明
void*
是不完整的类型。传递
xyz(x)
,而不是索引它。我想知道
xyz()
如何处理
x
而不知道
x
的类型。上面的代码是一段示例代码。我没有发布实际代码。在xyz中,我们需要传递参数,如&x[0]。到目前为止,每个结构都有两个不同的函数,可以正常工作。我正在尝试通过添加此if条件来重构代码。
xyz
需要将其转换回
price*
store*
,然后才能对其进行索引。它需要一些方法来知道它指向哪一个。谢谢,但是如果我像这样使用x,它就会抛出错误:xyz(&x[0]);错误:算术中使用了“void”类型的指针,错误:“void”不是指向对象的指针type@user1138143:什么是
xyz
xyz(x)
足够了吗?谢谢,但如果我像这样使用x,那就是抛出错误:xyz(&x[0]);错误:算术中使用了“void”类型的指针,错误:“void”不是指向对象的指针type@user1138143:什么是
xyz
xyz(x)
足够吗?