error:指向预期浮点值的指针值

时间:2014-10-09 00:05:25

标签: c pointers

这不是家庭作业,但我的最后一项任务明确表示我在编码C时并没有清楚地理解指针。

因此,我尝试使用指针键入一个简单的程序只是为了反转函数中的整数,所以我可以找出理解中的差距。

显然,我已经到了,但我仍然无法弄清楚我做错了什么。

我的源代码如下。

#include <stdio.h>

float invert(int *num);

void main (void)
{
int num;
float a;

printf("enter an integer \n");

scanf("%i", &num);

printf("Number entered %i \n", num);

a=invert(&num);

printf("This is the invse from main %f \n", a);

}


float invert(int *num) /* function inverts integer */

{       
float invse;

printf("num is %i \n\n", *num);

invse = 1/(float)num;

printf("invse is %f \n\n", invse);

return(invse);

}

我的想法是我使用指针指示计算机使用函数invert()中存储在num的地址处的值。指针出现在变量声明中。我将存储在该指针中的值转换为float,因此我可以将其反转,并将其存储在局部变量中。

问题似乎出现在局部变量赋值中。我的编译器返回“invert.c:29:2:error:指针值,用于预期浮点值的位置   invse = 1 /(float)num;   ^

显然我的代码表示反向的指针值,但我将其声明为浮点数,我觉得这很困惑。

感谢任何帮助。这将节省我为我的任务完成更大的代码集,我没有在这里发布。

感谢。

1 个答案:

答案 0 :(得分:1)

根据printf

内的invert电话来判断
printf("num is %i \n\n", *num);

您已经知道,为了访问传递给invert进行反转的值,您必须取消引用num指针:*num

如果是这样,那么当您执行反演时,为什么不解除引用num

invse = 1/(float)num;

我的意思是,如果你是那个写printf的人,你也应该意识到实际的倒置应该是

invse = 1 / (float) *num;

或者,作为

invse = 1.f / *num;

除了错误之外,原始变体是非法的:不允许在C中将指针转换为浮点类型,这是错误消息的原因。

P.S。从更大的角度来看,没有真正的理由通过指针将数字传递给invert。传递直接值会更有意义

float invert(int num)
{
  ...

在这种情况下,您当然不必取消引用invert内的任何内容。