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)
足够吗?