C:使用指针从不同函数更新 main 中的变量的问题

C: Problem using pointers to update variable in main from different function

我是指针和 C 的新手。当我第一次打印 Q 时,我得到了预期的 0。一旦我将 Q 更新为 q 的值,我再次将其打印出来并按预期获得 -1。但是,当我将 Q 作为主要功能的一部分打印出来时,我再次得到 0。我的指针做错了什么?

#include <stdio.h>
#include <math.h>

void decompose(double k, int *S, int *Q, double *F);

int main(){
    double k, F;
    int S, Q;
    k = 0.75;
    decompose(k, &S, &Q, &F);
    /*Printed third*/
    printf("%g\n", k);
    printf("%i\n", S);
    printf("%i\n", Q);
    printf("%g\n", F);
    return(0);
}

void decompose(double k, int *S, int *Q, double *F){
    if (k > 0){
        *S = 1;
    }
    else{
        *S = -1;
        k = k * -1;
    }
    
    int b = 2, q = 0;
    if (k > 1){
        while (pow(b, q) < k){
            q = q + 1;
        }
        q = q - 1;
    }
    else if (k < 1){
        while (pow(b, q) > k){
            q = q - 1;
        }
        /*Printed first*/
        printf("%i\n", q);
        printf("%i\n", *Q);
    }
    *Q = q;
    /*Printed second*/
    printf("%i\n", q);
    printf("%i\n", *Q);
    *F = frexp(k, Q);
}

frexp 更改其第二个参数指向的 int。由于您要为第二个参数传递 Q,因此它会更改 *Q.

调用它时,第一个参数 k 的值为 .75。 frexp 将第二个参数指向的 int 设置为将第一个参数缩放到区间 [½, 1) 所需的 two 的指数。由于 .75 已经在 ½ 和 1 之间,.75 = .75•20,因此 *Q 设置为零。