函数的按引用传递调用

3
我只想在这里给你的家庭作业提供正确的方向。以下是问题:
(1) 编写一个名为input的C函数,返回void类型,此函数提示用户输入两个整数和一个双精度值。该函数从键盘读取这些值并计算出这两个整数的乘积。该函数使用引用调用来将读取的三个值和计算出的乘积传递回主程序。然后,主程序打印读取的三个值和计算出的乘积。提供输入3 5 23.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);

} 

我无法弄清如何使用指针引用变量,这对我来说并不起作用。

任何帮助都将是极好的!

5个回答

3
您正在添加到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);
}

输出:

1
2
3.5
1 - 2 - 3.500000
7.000000
1 : 2 : 3.500000

2

您已经接近成功,但是请使用传递的指针而不是创建新变量xyz

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

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

为什么要使用 +=?因为 double 没有被初始化,所以你很可能会得到垃圾值。 - dreamlax

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

这会出大问题。您正在将产品添加到之前的任何垃圾中。您需要删除+,即:

*pro = (x * y * z);

0

在读取input函数中的数字时,您可以利用指针iptrjptrkptrproptr直接将值读入在main函数中声明的变量ijk中:

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.
} 

是我理解有误,还是问题没有指明让我对读入的双精度数值进行任何操作? - Chad
@Chad:这就是我从问题中得到的信息。 - codaddict

0
你的程序没有设置输入参数 i、j 和 k 的值。
不要使用 x、y 和 z,直接使用这些参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接