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

标签 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 * (double) argv[1] * (double) argv[1]; //this does not

        return 0;

}`

为什么第一个语句可以编译而第二个语句不能编译?不应该(double) argv[1]atof(argv[1]) 一样有效?我希望能够用普通的 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

最佳答案

您看到的问题与转换/转换有关。在第二行中 - 您收到错误的地方 - 您需要将字符串转换为 double ,但您不是 - 您只是转换该值,即“告诉编译器您拥有的内容是double”,但不是。

在 C 中,类似类型的转换工作 - intfloatshortdouble floatlongcharint。当然,您可能会在某些转换中失去精度。但是,例如,您不能将 int [] 转换为 int (实际上,您可以,但肯定会得到意想不到的结果),因为它是一个数组,并且另一个是单个变量。

要使其正常工作,您应该使用 atod 函数。检查this post了解详情。

关于char *argv[] 到普通 C 中的浮点类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46929333/

相关文章:

Swift 类型转换和括号

c++ - 可以将 std::numeric_limits<T> 专门用于用户定义的类数类吗?

java - 如何转换继承的封装属性以公开子类的方法 - Java

c - 为什么我必须在使用它的值之前将 void 指针转换为 int 指针?

c++ - C++中数组索引的奇怪类型分配

c - 阻塞线程直到系统时钟发生第二次变化

c++ - 如何在 Arduino 上格式化长加千位分隔符

c - Valgrind 修复内存泄漏

c# - 将 .txt 文件解析为不同的数据类型

c++ - 为什么用非常量声明静态变量不会在g++中给出错误