C 按引用调用函数

C 按引用调用函数,c,pointers,reference,C,Pointers,Reference,我只想把我的家庭作业推向正确的方向。问题是: (1) 编写一个名为input的C函数,返回void,如下所示 函数提示用户输入 两个整数后跟一个双精度 精度值。此函数读取 这些值来自键盘和 查找两个整数的乘积 进入。该函数使用callby 用于传达 读取的三个值和乘积 计算回到主程序。 然后,主程序打印 读取三个值并生成产品 计算提供测试结果 输入:3523.5。不要使用数组 或程序中的全局变量 这是我的代码: #include <stdio.h> #include <stdl

我只想把我的家庭作业推向正确的方向。问题是:

(1) 编写一个名为input的C函数,返回void,如下所示 函数提示用户输入 两个整数后跟一个双精度 精度值。此函数读取 这些值来自键盘和 查找两个整数的乘积 进入。该函数使用callby 用于传达 读取的三个值和乘积 计算回到主程序。 然后,主程序打印 读取三个值并生成产品 计算提供测试结果 输入:3523.5。不要使用数组 或程序中的全局变量

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

void input(int *day, int *month, double *k, double *pro);

int main(void){
    int i,j;
    double k, pro;


    input(&i, &j, &k, &pro);
    printf("%f\n", pro);
    return 0;
}

void input(int *i, int *j, double *k, double *pro){

    int x,y;
    double z; 
    double product;

    scanf("%d", &x);
    scanf("%d", &y);
    scanf("%f", &z);


    *pro += (x * y * z);

} 
#包括
#包括
无效输入(整数*天,整数*月,双*k,双*pro);
内部主(空){
int i,j;
双k,亲;
输入(&i,&j,&k,&pro);
printf(“%f\n”,pro);
返回0;
}
无效输入(int*i、int*j、double*k、double*pro){
int x,y;
双z;
双乘积;
scanf(“%d”和&x);
scanf(“%d”和“&y”);
scanf(“%f”、&z);
*pro+=(x*y*z);
} 
我真的不知道如何用指针引用变量,这对我来说就是行不通


任何帮助都会很好

input
函数中读取数字时,您可以使用
iptr
jptr
kptr
proptr
指针,将值直接读取到
main
函数中声明的变量
i
j
k
,如下所示:

void input(int *iptr, int *jptr, double *kptr, double *proptr){

    scanf("%d", iptr); // read directly into i using pointer to i.
    scanf("%d", jptr);
    scanf("%f", kptr);   

    *proptr = ( (*iptr) * (*jptr) ); // compute product and assign to pro.
} 

您的程序没有做的是将输入值设置为i、j和k


不要使用x、y和z,而要使用参数。

您就快到了,但是不要创建新变量
x
y
z
,而是使用您传递的指针:

scanf("%d", i);
scanf("%d", j);
scanf("%f", k);

*pro += ((*i) * (*j) * (*k));
这将是可怕的崩溃。您正在将产品添加到pro中的任何垃圾中。您要删除
+
,即:

*pro = (x * y * z);

如果添加到
pro
,但未初始化,则不会将值从
pro
传递回。将值存储到传入的变量的地址中。在这种情况下,您需要取消对指针的引用以访问/检索值,
*i
,并且在您的方法中直接使用传递的地址,这样您就不需要再次获取它们的地址

这是有效的-我用
float
替换了
double

#include <stdio.h>
#include <stdlib.h>

void input(int *day, int *month, float *k, float *pro);

int main(void){
    int i,j;
    float k, pro;

    i = j = k = pro = 0;

    input(&i, &j, &k, &pro);
    printf("%f\n", pro);
    printf("%d : %d : %f\n", i,j,k);
    return 0;
}

void input(int *i, int *j, float *k, float *pro){

    scanf("%d", i);
    scanf("%d", j);
    scanf("%f", k);

    printf("%d - %d - %f\n", *i,*j,*k);

    *pro += (*i * *j * *k);
}

是我,还是问题没有指定我对读入的双值执行任何操作?@Chad:这就是我从问题中得到的。为什么
+=
?双精度还没有初始化,所以你可能会得到垃圾。
#include <stdio.h>
#include <stdlib.h>

void input(int *day, int *month, float *k, float *pro);

int main(void){
    int i,j;
    float k, pro;

    i = j = k = pro = 0;

    input(&i, &j, &k, &pro);
    printf("%f\n", pro);
    printf("%d : %d : %f\n", i,j,k);
    return 0;
}

void input(int *i, int *j, float *k, float *pro){

    scanf("%d", i);
    scanf("%d", j);
    scanf("%f", k);

    printf("%d - %d - %f\n", *i,*j,*k);

    *pro += (*i * *j * *k);
}
1
2
3.5
1 - 2 - 3.500000
7.000000
1 : 2 : 3.500000