Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

小数を配列から取り出したときにintになってしまう

解決したいこと

c言語でdouble型の配列に小数が入っている状況です。
配列から要素を取り出すと勝手に整数(int)になってしまいます。

文字列で式を受け取り、四則演算の結果を返すパーサーを作っています。
割り算がある関係上double型の計算結果を配列に入れていきたいのですが、配列から数値を取り出したときに
なぜかintになってしまいます。

該当するソースコード

//計算結果を積むスタック
double stack[32] ;
int sp=0 ;

...

int pop(void){
    sp-- ;
    return(stack[sp]) ;//ここでおそらくintになってしまう
}

double top;
double bottom;

//四則演算の計算をするところ
switch (node->kind) {
    case ND_ADD:
    top = pop();
    bottom = pop();
    push(bottom + top) ;
    printf("  add rax, rdi\n");
    break;

...


自分で試したこと

pop()を呼んで、関数内で配列から要素を取り出し、返り値をdouble型の変数top,bottomに入れても勝手にintになってしまいます。
キャストしてみたりしたのですがうまくいきません。
たとえば、stack[sp]の中に
[0]1.25
といった数値が入っていたとして、pop()を介して変数topの要素を取り出そうとすると1になってしまいます。
ソースコードは関係していると思われる部分を載せました。intになってしまう理由について教えていただければ幸いです。

0

2Answer

すでに指摘されていますが、pop関数の戻り値がintになってますね。

その為、doubleからintへ変換されています。呼び出し元で再度intからdoubleに変換されますが、int型に変換された時点で整数部の情報しか持っていない状態なので変数topなどの値は少数以下が切り捨てられたようになっています。

1Like

Comments

  1. @voyce_sakamoto

    Questioner

    丁寧な回答ありがとうございます。
    上の指摘は自分で投稿した後に気づいて自分で指摘したものです笑
    頭の回転が鈍くなるとつまらないミスをしてしまいますね、、気をつけます

Your answer might help someone💌