这不是家庭作业,但我的最后一项任务明确表示我在编码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; ^
显然我的代码表示反向的指针值,但我将其声明为浮点数,我觉得这很困惑。
感谢任何帮助。这将节省我为我的任务完成更大的代码集,我没有在这里发布。
感谢。
答案 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
内的任何内容。