argv [1]を浮動小数点値に変換しようとしていますが、コンパイルエラーが発生します。ここに私のコードです。char * argv [] to浮動小数点型のキャスト
#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;
}`
なぜ最初のステートメントはコンパイルされ、2番目のステートメントはコンパイルされませんか? (double) argv[1]
はatof(argv[1])
と同じでなければなりませんか?
更新:これらは私が取得エラーです:
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
'argv [1]'は 'char *'であり、 'char *'を 'double'にキャストすることは意味をなさない。 _キャスティング_は_converting_と同じではありません –
@MichaelWalz - 実際にキャストは変換の一種です。ここでの問題は、 'char *'を 'float'(または' double')に変換することは、文字列を解釈して解析して 'float'を得ることと同じではないということです。後者は 'atof()'がするものです。 – Peter
@Peterはい、それは良い説明です。 –