很抱歉,如果这个问题在某个地方已经有解决方案,但我发现的所有类似问题的答案都没有帮助我。
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");
}
上面的代码在编译时返回这些错误:
In function 'imprimePilhaDouble'
erro: cannot convert to a pointer type
In function 'imprimePilhaFloat'
erro: cannot convert to a pointer type
分别为printf("%e\t", *((double*) 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");
}
答案 0 :(得分:3)
问题是这一行:
printf("%e\t", *((double*) vetorDouble[i]));
尝试将double
投射到double *
。您不能将浮点值强制转换为指针,因此您会收到报告的错误。您的float
函数也会发生同样的事情。
当您将int
投射到int *
时,这不会导致错误,但几乎是无稽之谈。
你想做什么?
答案 1 :(得分:0)
vetor是(void *)
。
vetorDouble已投放到(double *)
vectorDouble [i]实际上是*(vetorDouble + i)
,即基地址vetorDouble指向的内容,偏移量为(i)* size(double),因为vetorDouble是类型为(* double)
。
所以,vetorDouble [i]是*(vectorSouble+i)
。
已经是双重了。你不需要再次将其转换为(double*)
,并且当它告诉你不能将double转换为a(double *)时编译器是正确的:它没有意义。< / p>
所以,你必须写:
void imprimePilhaDouble (void *vetor, int tam)
{
double *vetorDouble = (double*) vetor;
for (i = 0; i < tam; ++i)
{
printf("%e\t", vetorDouble[i]);
}
printf("\n");
}
你甚至可以写(因为,读取你的功能名称,它等待一个双倍):
void imprimePilhaDouble (double *vetorDouble, int tam)
{
for (i = 0; i < tam; ++i)
printf("%e\t", vetorDouble[i]);
printf("\n");
}