char*argv[]到普通C中的浮点类型转换

char*argv[]到普通C中的浮点类型转换,c,types,casting,C,Types,Casting,我试图将argv[1]转换为浮点值,但最终出现编译错误。这是我的密码 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { double circleArea = 3.14159 * atof(argv[1]) * atof(argv[1]); //this works double circleArea = 3.14159 * (doubl

我试图将argv[1]转换为浮点值,但最终出现编译错误。这是我的密码

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

        double circleArea = 3.14159 * atof(argv[1]) * atof(argv[1]); //this works

        double circleArea = 3.14159 * (double) argv[1] * (double) argv[1]; //this does not

        return 0;

}`

您看到的问题与强制转换/转换有关。在第二行中,您得到了错误-您需要将字符串转换为
double
,但您没有-您只是在转换值,即“告诉编译器您有一个
double
”,而不是

在C语言中铸造类似的类型-
int
float
short
double
float
long
char
int
。当然,在某些转换中可能会丢失精度。但是,例如,您不能将
int[]
转换为
int
(实际上,您可能会这样做,但您肯定会得到意外的结果),因为一个是数组,另一个是单个变量


要使其工作,应使用
atod
函数。查看详细信息。

argv[1]
是一个
char*
,将
char*
强制转换为
double
没有意义。铸造与铸造不同converting@MichaelWalz-实际上,转换是一种转换类型。这里的问题是,将
char*
转换为
float
(或
double
)与解释和解析字符串以获得
float
不同。后者就是
atof()
所做的。@Peter是的,这是一个更好的解释。@MichaelWalz-我也这么认为;)这是一个简单的C问题,而不是C/C++问题。
circleArea.c: In function ‘main’:
circleArea.c:9:2: error: pointer value used where a floating point value was expected
  double area = 3.14159 * (double) argv[1] * (double) argv[1]; //this does not
  ^~~~~~
circleArea.c:9:2: error: pointer value used where a floating point value was expected