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



我是指针和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("%gn", k);
printf("%in", S);
printf("%in", Q);
printf("%gn", 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("%in", q);
printf("%in", *Q);
}
*Q = q;
/*Printed second*/
printf("%in", q);
printf("%in", *Q);
*F = frexp(k, Q);
}

frexp更改第二个参数指向的int。由于您正在为第二个参数传递Q,因此它将更改*Q

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

最新更新