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
设置为零。
我是指针和 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
设置为零。