我想调用一个计算圆的宽度的函数。
#include <stdio.h>
void area(double*);
int main()
{
void* vp = NULL;
double r;
printf("input value : ");
scanf(" %lf", &r);
(double*)vp = &r;
void area(vp);
}
void area(double* dp)
{
double result;
result = (*dp) * (*dp) * (3.14);
printf("circle are is : %.2lf", result);
return 1;
}*
我想调用// void area(vp)//中的函数,但我无法捕获visual stdio中的错误并按原样继续操作。你知道原因是什么吗?
答案 0 :(得分:2)
要调用该函数,您可以写area(vp);
而不是 void area(vp);
。
后者,因为它出现在函数main
中,是一个函数原型,没有运行时效果。
并修正PI的定义:鉴于您使用的是double
类型,因此非常不合适。见Math constant PI value in C
答案 1 :(得分:0)
你应该写
area(&r);
而不是错误和多余的
void area(vp);
添加你在语法
中犯下的明显错误我认为vp
没有任何理由在那里。
为确保scanf()
成功,请务必检查通话的返回值。
引用C11
,章节§6.8.6.4,
带有表达式的
return
语句不应出现在返回类型的函数中 是void
。 [....]
答案 2 :(得分:0)
代码有三个问题。
对于初学者来说,不清楚为什么指针vp
被声明为具有类型void *,尽管在程序中它仅用于指向double类型的对象。
为什么不宣布它像
double *vp = NULL;
结果这个技巧与指针
(double*)vp = &r;
将无法编译,因为在左侧,表达式(double*)vp
为rvalue
,可能未分配。
你可以写
vp = &r;
第二个问题是这个陈述
void area(vp);
也无效。要调用该函数,您应该写
area(vp);
第三个问题是返回类型为void的函数不应在return语句中指定表达式
此声明将被删除。
return 1;
从C标准(6.8.6.4返回声明)
1 带有表达式的return语句不应出现在a中 返回类型为void的函数。没有的返回语句 expression只出现在返回类型为void的函数中。
将函数的参数声明为具有引用类型是没有意义的。
函数定义可能看起来像
double area( double dp )
{
const double PI = 3.14;
return dp * dp * PI;
}
调用pf printf的语句应该在main
中移动printf( "circle are is : %.2lf", area( r ) );