Can';t型铸造';void*';至';双*';诺尔';浮动*';使用C语言

Can';t型铸造';void*';至';双*';诺尔';浮动*';使用C语言,c,pointers,compiler-errors,C,Pointers,Compiler Errors,很抱歉,如果这个问题在那里已经有了解决方案,但是我找到的所有类似问题的答案对我都没有帮助 void imprimePilhaDouble (void *vetor, int tam) { int i; double *vetorDouble; vetorDouble = (double*) vetor; for (i = 0; i < tam; ++i) { printf("%e\t", *((double*) vetorDoub

很抱歉,如果这个问题在那里已经有了解决方案,但是我找到的所有类似问题的答案对我都没有帮助

void imprimePilhaDouble (void *vetor, int tam)
{
    int i;
    double *vetorDouble;

    vetorDouble = (double*) vetor;

    for (i = 0; i < tam; ++i)
    {
        printf("%e\t", *((double*) vetorDouble[i]));
    }
    printf("\n");
}

void imprimePilhaFloat (void *vetor, int tam)
{
    int i;
    float *vetorFloat;

    vetorFloat = (float*) vetor;

    for (i = 0; i < tam; ++i)
    {
        printf("%f\t", *((float*) vetorFloat[i]));
    }
    printf("\n");
}
对于行
printf(“%e\t”),*((双*)vetorDouble[i])
printf(“%f\t”,*((float*)vetorFloat[i])分别为。
有没有办法阻止这些错误?我做了另一个类似的功能,它似乎工作正常:

void imprimePilhaInteiro (void *vetor, int tam)
{
    int i, *vetorInt;

    vetorInt = (int*) vetor;

    for (i = 0; i < tam; ++i)
    {
        printf("%d\t", *((int*) vetorInt[i]));
    }
    printf("\n");
}
void imprimePilhaInteiro(void*vetor,inttam)
{
int i,*否决权;
vetorInt=(int*)vetor;
对于(i=0;i
问题在于这一行:

printf("%e\t", *((double*) vetorDouble[i]));
尝试将
double
强制转换为
double*
。您不能将浮点值强制转换为指针,因此您会得到报告的错误。您的
float
函数也会发生同样的情况

当您将
int
转换为
int*
时,这不会导致错误,但几乎是胡说八道


你想做什么?

问题是这行:

printf("%e\t", *((double*) vetorDouble[i]));
尝试将
double
强制转换为
double*
。您不能将浮点值强制转换为指针,因此您会得到报告的错误。您的
float
函数也会发生同样的情况

当您将
int
转换为
int*
时,这不会导致错误,但几乎是胡说八道


你想做什么?

问题是这行:

printf("%e\t", *((double*) vetorDouble[i]));
尝试将
double
强制转换为
double*
。您不能将浮点值强制转换为指针,因此您会得到报告的错误。您的
float
函数也会发生同样的情况

当您将
int
转换为
int*
时,这不会导致错误,但几乎是胡说八道


你想做什么?

问题是这行:

printf("%e\t", *((double*) vetorDouble[i]));
尝试将
double
强制转换为
double*
。您不能将浮点值强制转换为指针,因此您会得到报告的错误。您的
float
函数也会发生同样的情况

当您将
int
转换为
int*
时,这不会导致错误,但几乎是胡说八道

你想做什么?

审查员是一个
(void*)

vetorDouble被强制转换为
(双*)

vectorDouble[i]实际上是
*(vetorDouble+i)
,即偏移量为(i)*大小为(double)的基址vetorDouble指向的内容,因为vetorDouble是
(*double)

因此,vetorDouble[i]是
*(vectorSouble+i)

它已经是双精度的了。您不需要再次将其强制转换为
(double*)
,编译器告诉您无法将double转换为(double*):这没有任何意义

所以,你必须写:

void imprimePilhaDouble (void *vetor, int tam)
{
    double *vetorDouble = (double*) vetor;

    for (i = 0; i < tam; ++i)
    {
        printf("%e\t", vetorDouble[i]);
    }
    printf("\n");
}
void impimeimpilhadouble(void*vetor,inttam)
{
double*vetorDouble=(double*)vetor;
对于(i=0;i
您甚至可以编写(因为读取函数名时,它会等待一个双精度):

void impimepilhadouble(双*vetorDouble,int-tam)
{
对于(i=0;i
vetor是一个
(void*)

vetorDouble被强制转换为
(双*)

vectorDouble[i]实际上是
*(vetorDouble+i)
,即偏移量为(i)*大小为(double)
的基址vetorDouble指向的内容,因为vetorDouble是
(*double)

因此,vetorDouble[i]是
*(vectorSouble+i)

它已经是双精度的了。您不需要再次将其强制转换为
(double*)
,编译器告诉您无法将double转换为(double*):这没有任何意义

所以,你必须写:

void imprimePilhaDouble (void *vetor, int tam)
{
    double *vetorDouble = (double*) vetor;

    for (i = 0; i < tam; ++i)
    {
        printf("%e\t", vetorDouble[i]);
    }
    printf("\n");
}
void impimeimpilhadouble(void*vetor,inttam)
{
double*vetorDouble=(double*)vetor;
对于(i=0;i
您甚至可以编写(因为读取函数名时,它会等待一个双精度):

void impimepilhadouble(双*vetorDouble,int-tam)
{
对于(i=0;i
vetor是一个
(void*)

vetorDouble被强制转换为
(双*)

vectorDouble[i]实际上是
*(vetorDouble+i)
,即偏移量为(i)*大小为(double)
的基址vetorDouble指向的内容,因为vetorDouble是
(*double)

因此,vetorDouble[i]是
*(vectorSouble+i)

它已经是双精度的了。您不需要再次将其强制转换为
(double*)
,编译器告诉您无法将double转换为(double*):这没有任何意义

所以,你必须写:

void imprimePilhaDouble (void *vetor, int tam)
{
    double *vetorDouble = (double*) vetor;

    for (i = 0; i < tam; ++i)
    {
        printf("%e\t", vetorDouble[i]);
    }
    printf("\n");
}
void impimeimpilhadouble(void*vetor,inttam)
{
double*vetorDouble=(double*)vetor;
对于(i=0;i
您甚至可以编写(因为读取函数名时,它会等待一个双精度):

void impimepilhadouble(双*vetorDouble,int-tam)
{
对于(i=0;i
vetor是一个
(void*)

vetorDouble被强制转换为
(双*)

vectorDouble[i]实际上是
*(vetorDouble+i)
,即偏移量为(i)*大小为(double)
的基址vetorDouble指向的内容,因为vetorDouble是
(*double)类型