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)类型